![](/img/trans.png)
[英]Fire-and-forget in .Net Core Web API - approaches and observations
[英]Await and fire-and-forget in .NET Core
我正在开发一个 Blazor 应用程序。
当用户填写表单时,需要将数据保存到表格中,并且需要运行更长的任务。
用户不需要等待这个更长的任务完成。 稍后会通知他。
但是当长任务完成时,需要更新表条目。
这个怎么做?
这是我当前的代码,它阻止用户直到所有完成:
public async Task<Client> Create(Client client)
{
client.DatabaseCreated = false;
await _context.Clients.AddAsync(client);
await _context.SaveChangesAsync();
Debug.WriteLine("Client added");
// Run longer task.
try
{
// TODO: Don't wait for it:
var longTask= myLongTask(client.Code, client.Id);
// update table entry
client.DatabaseCreated = true;
var updateClient = _context.SaveChangesAsync();
await Task.WhenAll(longTask, updateClient);
Debug.WriteLine("Client updated");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
Debug.WriteLine("Client returned");
return client;
}
用户不需要等待这个更长的任务完成。 稍后会通知他。 这个怎么做?
To do this in a reliable way, you would need to 1) have a reliable queue (eg, Azure Queue / Amazon SQS / etc.), and 2) have a background service (eg, ASP.NET Core Background Service / Azure Function / Amazon Lambda / 等)。 ASP.NET API 只会将消息放入队列然后返回; 后台服务从队列中读取并处理消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.