c# - 声明一个可以等待*和*异步运行而无需等待它完成的异步方法?

标签 c# async-await

假设您正在开发一个 api 并希望提供异步方法,但有可能用户实际上并不希望在继续下一行之前“等待”特定的异步方法完成;有没有办法让它“一劳永逸”?也就是说,使该方法实际上通过 Task 异步运行并让它继续到下一行而无需“等待”?这样,如果用户想要等待它,那么他们就可以等待,而那些只想将其作为任务运行的用户也可以这样做。

最佳答案

(将我的评论移至答案,因为我猜是)

所有异步方法都是开箱即用的。用户永远不会被迫等待任何事情。是否等待您的异步方法取决于用户。您不需要做任何特殊的事情来支持这两种情况。

示例:

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 种情况。

关于c# - 声明一个可以等待*和*异步运行而无需等待它完成的异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31028795/

相关文章:

c# - 爬虫/机器人如何工作?区分机器人/爬虫 http 请求

c# - ASP.Net Core 2.0 SignInAsync返回异常值不能为null,提供程序

c# - 如何在我的可视化 C# 表单中使用 zxing.net

.net - 为什么 Visual Studio 调试器不显示由 wait 关键字生成的状态机代码?

javascript - 异步箭头函数的语法

reactjs - 为什么 Async Await 可以与 React setState 配合使用?

c# - 线程池 - 如何从工作线程调用主线程中的方法(带参数)

c# - 单击图像的一部分

javascript - 类 - 通过等待返回数据?

c# - 如何取消await Task.Delay()?