【发布时间】:2012-12-05 16:20:54
【问题描述】:
我在 .net 4.0 中安装了异步包。这使我能够在我的应用程序中使用 async / await 关键字。
据我所知,到目前为止,我可以使用将我的 task.run 代码包装在 async / await 中,并且与使用 task.run 和 continuewith 的结果相同。
这是真的吗?还是有更深层次的区别?
【问题讨论】:
标签: c# .net async-await
我在 .net 4.0 中安装了异步包。这使我能够在我的应用程序中使用 async / await 关键字。
据我所知,到目前为止,我可以使用将我的 task.run 代码包装在 async / await 中,并且与使用 task.run 和 continuewith 的结果相同。
这是真的吗?还是有更深层次的区别?
【问题讨论】:
标签: c# .net async-await
这取决于您对ContinueWith 所做的事情。但是,是的,您通常可以使用await 来实现与以前使用ContinueWith 相同的效果。您不能做的是“仅在失败时继续使用此代码”之类的事情 - 您只需为此使用正常的异常处理。正如 AlexH 所说,在您的 async 方法的整体行为方面会有进一步的差异 - 但在大多数情况下,我会说这是可取的。基本上就是代码流的异步,所以async方法往往会调用更多的async方法等等。
我建议您阅读 async/await 的内容(那里有大量资源 - 我建议您将 MSDN 上的 "Consuming the Task-based Asynchronous Pattern" 页面作为一个起点。
【讨论】:
如果在函数原型中引入 async 关键字,将会有所不同;异常将在任务调用者的级别引发。 如果没有 async 关键字,则必须检查 TaskContinuationOptions.OnlyOnFaulted 状态才能获取异常。
【讨论】: