哪些依赖工作的例子会阻止异步 - 等待获得任何好处?

时间:2016-12-09 15:20:33

标签: c# .net asynchronous parallel-processing async-await

关于async - await的快速提问。

如果我有一大堆代码,比如

object foo; 
Task t1 = LongRunningTaskThatSetsFoo(out foo); 
UseFooToDoSomething(foo);
await t1; 
然后会发生什么?因为在LongRunningTaskThatSetsFoo被允许开始的时间(第2行)与我们等待其结果的时间(第4行)之间没有任何独立的工作要做。

1 个答案:

答案 0 :(得分:0)

会发生什么? LongRunningTaskThatSetsFoo不允许Task返回foo,直到设置foo,这意味着启动异步时必须提供LongRunningTaskThatSetsFoo操作,而不是异步操作结束时。这个可能只是没有意义。我认为从技术上讲,你可以包含有关foo 要做什么的信息,而不是它已经做了什么,但是我......持怀疑态度。

无论如何,因为必须在异步操作被允许开始之前设置LongRunningTaskThatSetsFoo(这是UseFooToDoSomething返回时)foo然后使用Task然后该方法将返回并在LongRunningTaskThatSetsFoo返回的 LongRunningTaskThatSetsFoo 完成后继续执行。

你几乎肯定不想这样做。如果Task<T>生成一个值,那么它应返回foo,其中Task<T> >e.Cancel = False >FORM2.Show() (if you want to show another form) 的结果。当然,产生结果的异步操作在任何方面都是无用的。他们非常非常有用。当前的线程无法完成任何依赖于结果的工作,但是他们能够执行不依赖于结果的操作,并且让所做的操作依赖于结果一旦计算结果就开始运行。