繁体   English   中英

.NET Core 中的等待和即发即弃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM