声明一个可以等待*和*的异步方法,在不等待完成的情况下异步运行
本文关键字:等待 运行 异步 情况下 异步方法 一个 声明 | 更新日期: 2023-09-27 17:59:20
假设您正在开发一个api,并希望提供异步方法,但用户可能并不想在继续下一行之前"等待"特定的异步方法完成;有没有一种方法可以让它"燃烧并忘记"?也就是说,使方法实际上通过Task异步运行,并让它继续到下一行而不"await"?这样,如果用户想等待,那么他们可以,而那些只想将其作为任务运行的用户可以这样做
(将我的评论移到一个答案上,因为我想它是)
所有异步方法都是开箱即用的。用户永远不会被迫等待任何事情。是否等待异步方法取决于用户。你不需要做任何特别的事情来支持这两种情况。
示例:
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种情况。
您必须了解await
不执行该方法。await
仅在函数返回的Task
对象中注册剩余函数的延续。(实际上在Task
对象的Awaiter中)。
因此,无论你是否以及如何等待它的完成,函数都在执行。您可以稍后存储Task
对象和await
对象。或者使用Task.Wait
函数等待它阻塞。