等待.NET4.0的更新换代?.NET4.0中await关键字的最佳替代方法是什么?我有一个方法需要在异步操作后返回一个值。我注意到wait()方法完全阻塞了线程,致使异步操作无用。释放UI线程时运行异步操作的选项有哪些?我认为您的基本选项可能是安装异步CTP的最简单方法。据我所知,许可证允许商业使用。它修补了编译器并附带了一个150kb的dll,您可以将其包含在您的项目中。您可以使用Task和.ContinueWith()。但这意味着,您必须在异常处理和流量控制上付出一些努力。任务是一个函数构造。这就是为什么ContinueWith()不能很好地与for循环或try-catch块等命令式结构混合的原因。所以引入了async和await,让编译器可以帮到我们。如果无法获得编译器支持(即使用.Net4.0),最好的办法是将TAP与功能框架一起使用。ReactiveExtensions是处理异步方法的一个非常好的框架。只需在谷歌上搜索“reactnativeextensiontasks”即可开始。您可以使用我在非4.5代码中使用的yield协程实现类似等待的行为。您需要一个YieldInstruction类,该类是从应该运行异步的方法中检索到的:然后你需要一些YieldInstruction实现(aeTaskCoroutine来处理任务)并使用它的方式(伪代码):publicIEnumeratorDoAsync(){HttpClientclient=...;字符串结果;yieldreturnnewTaskCoroutine(()=>{result=client.DownloadAsync();});//在此处处理结果}现在您需要一个处理指令执行的调度程序。for(Coroutineitemincoroutines){if(item.CurrentInstruction.IsFinished()){//移至下一条指令并检查协程是否已完成if(item.MoveNext())Remove(item);在开发WPF或WinForms应用程序中,如果您想在正确的时间更新协程,也可以避免任何Invoke调用。您还可以扩展这个想法,让您的生活更轻松。范例:以上是C#学习教程:Waitingforreplacementin.NET4.0?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicIEnumeratorDoAsync(){HttpClientclient=...;客户端.DownloadAsync(..);字符串结果;while(client.IsDownloading){//更新进度条progressBar.Value=client.Progress;//等待一个更新yieldreturnYieldInstruction.WaitOneUpdate;}//此处处理结果}本文摘自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
