假设你正在开发一个api并且想要提供异步方法,但是有可能用户实际上并不想“等待”特定的异步方法在继续下一行之前完成;有没有办法让它“火与忘”?也就是说,这样方法实际上是通过一个Task异步运行并让它继续下一行而没有“等待”?这样,如果用户想要等待它,那么他们可以,并且那些想要将其作为任务运行的人可以这样做。
答案 0 :(得分:3)
(将我的评论移到答案中,因为我猜是这样)
所有异步方法都是开箱即用的。用户永远不会被迫等待任何事情。这取决于用户是否等待异步方法。你不需要做任何特殊的事情来支持这两种情况。
示例:强>
public async Task MyAsyncMethod() {
// do something asynchronous in here...
}
您可以使用await
:
await obj.MyAsyncMethod();
......或不......
obj.MyAsyncMethod();
在最后一种情况下,该方法将是一场“一劳永逸”。
用户还可以选择使用您的方法执行以下操作:
Task t = obj.MyAsyncMethod();
// perform some other tasks that don't depend on the completion of "MyAsyncMethod"
await t; // now I want to await on the task before continuing.
// perform more tasks that require the completion of "MyAsyncMethod"
正如您所看到的,我不需要对我的异步方法进行任何更改以支持所有3种情况。
答案 1 :(得分:3)
您必须了解await
不执行该方法。 await
仅注册函数返回的Task
对象中剩余函数的延续。 (实际上在Task
对象的Awaiter中。)
因此,无论您是否以及如何等待它完成,该功能都在执行。您可以稍后存储Task
对象和await
。或者您使用Task.Wait
函数等待它阻止。