【发布时间】:2013-10-31 22:54:24
【问题描述】:
我是否可以使用 async/await 来设置所有选项,例如 OnlyOnRanToCompletion、OnlyOnCanceled、NotOnFaulted 等?我找不到有关如何获得与使用任务相同的结果的示例,例如:
Task.Factory.StartNew(foo).ContinueWith(bar, TaskContinuationOptions.NotOnRanToCompletion);
我不确定简单的条件或异常处理是否可以管理显式任务中可用的所有延续行为。
【问题讨论】:
-
你能设置位标志吗?你应该能够。 Tbh,不知道你在问什么
-
不需要异常处理;只需使用
try/catch块,您就可以像编写代码一样编写代码,就像几乎在其他任何地方编写任何代码一样。你为什么想要改用那种风格呢?如果您想使用“OnlyOn*”或“NotOn*”选项以外的其他选项,您需要哪些选项以及为什么? -
@natenho,如果你真的需要它,你应该可以用custom awaiter 来实现这个行为。
-
@Servy 我只是想关联特性,只是做一个练习来找出原始 TPL 代码和 elegant async/await 模式之间的转换工作和功能。基本上,问题是“我可以用更少的代码得到相同的结果吗?”。因为毕竟我们知道在这两种情况下都是 TPL 在幕后。
-
@natenho 您始终可以使用任务复制
await正在执行的操作,但并非所有可以使用显式任务完成的操作都可以使用await完成。
标签: c# multithreading task-parallel-library async-await