【发布时间】:2021-02-13 23:28:10
【问题描述】:
在我的项目中,我有一个发送电子邮件的网络调用,我不想等待响应,因为最有可能电子邮件提供商成功发送电子邮件。以下哪种方法更好,有什么区别?
Method 1:等待SendAsync并使用Task.Run
public async Task<IActionResult> Index()
{
await SendAsync();
return View();
}
private Task SendAsync()
{
_ = Task.Run(async () =>
{
_logger.LogInformation("Before");
await Task.Delay(10000); // Email send
_logger.LogInformation("After");
});
return Task.CompletedTask;
}
Method 2:不等待SendAsync
public IActionResult Index()
{
SendAsync();
return View();
}
private async Task SendAsync()
{
_logger.LogInformation("Before");
await Task.Delay(10000); // Email send
_logger.LogInformation("After");
}
这两种方法都可以在 Task.Delay(10000); 行中等待
【问题讨论】:
-
无。对此类关键任务使用一些事务性手段,例如使用发送请求填充一些 SQL/Redis/RabbitMQ 队列并在单独的工作人员中处理它们,而不会忘记。即发即弃对于非关键或可重复任务很有用:日志记录、UI 更新、遥测、延长寿命策略、可重试任务等
标签: c# asp.net-core asynchronous async-await task