关于async
- await
的快速提问。
如果我有一大堆代码,比如
object foo;
Task t1 = LongRunningTaskThatSetsFoo(out foo);
UseFooToDoSomething(foo);
await t1;
然后会发生什么?因为在LongRunningTaskThatSetsFoo
被允许开始的时间(第2行)与我们等待其结果的时间(第4行)之间没有任何独立的工作要做。
答案 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)
的结果。当然,产生结果的异步操作在任何方面都是无用的。他们非常非常有用。当前的线程无法完成任何依赖于结果的工作,但是他们能够执行不依赖于结果的操作,并且让所做的操作依赖于结果一旦计算结果就开始运行。