gpt4 book ai didi

c# - 如何在不等待完成的情况下启动异步方法?

转载 作者:行者123 更新时间:2023-11-30 13:43:40 24 4
gpt4 key购买 nike

有时我需要启动一个运行速度非常慢的异步作业。我不在乎这项工作是否成功,我需要继续处理我当前的线程。

比如有时我需要发送电子邮件或短信,但速度非常慢。我需要尽快响应 Web 客户端,所以我不想await

我用谷歌搜索了这个问题,一些文章建议我这样写:

// This method has to be async
public async Task<Response> SomeHTTPAction()
{
// Some logic...
// ...

// Send an Email but don't care if it successfully sent.
Task.Run(() => _emailService.SendEmailAsync());
return MyRespond();
}

或者像这样:

// This method has to be async
public async Task<Response> SomeHTTPAction()
{
// Some logic...
// ...

// Send an Email but don't care if it successfully sent.
Task.Factory.StartNew(() => _emailService.SendEmailAsync());
return MyRespond();
}

在调用完成之前会有一个警告说:。考虑将“等待”运算符应用于调用结果。

如果我真的 await 了怎么办? C# 中“即发即忘”的最佳实践是什么,只需调用异步方法而不等待其完成?

最佳答案

独立丢弃是避免此警告的最佳方法。

_ = Task.Run(() =>  _emailService.SendEmailAsync());

丢弃是虚拟变量,可用于忽略异步操作返回的任务对象。

https://learn.microsoft.com/en-us/dotnet/csharp/discards#a-standalone-discard

关于c# - 如何在不等待完成的情况下启动异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53183370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com