0

我正在开发 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;
        }
4

1 回答 1

4

用户不需要等待这个更长的任务完成。稍后会通知他。这个怎么做?

要以可靠的方式执行此操作,您需要 1) 具有可靠的队列(例如,Azure 队列 / Amazon SQS / 等),以及 2) 具有后台服务(例如,ASP.NET Core 后台服务 / Azure 函数/亚马逊Lambda /等)。ASP.NET API 只会将消息放入队列然后返回;后台服务从队列中读取并处理消息。

于 2020-07-27T21:04:47.673 回答