gpt4 book ai didi

asp.net - 异步/等待、TPL、WCF 服务、Web API : So many choices

转载 作者:行者123 更新时间:2023-12-02 13:09:37 28 4
gpt4 key购买 nike

我的 ASP.Net 4 Web 应用程序调用一些代码,为长时间运行的脚本生成一个进程。读取标准输出并在数据库中更新返回值。我想“一劳永逸”这段代码,以便我的 UI 保持响应,并且用户不必等待这两个操作完成。调用代码不需要这两个操作的最终结果,因此我认为我不需要“等待”任何东西,也不需要任何成功或失败的指示。

我对所有可用选项感到困惑。编写此代码的最佳方法是什么,以便这两个操作能够以愉快的方式发送并自行完成其工作?

最佳答案

I would like to "fire and forget" this bit of code

“一劳永逸”在 ASP.NET 上几乎总是错误的解决方案。

so that my UI remains responsive

您可以在不更改服务器端的情况下使 UI 响应。只需异步执行请求(对于 .NET UI 为 HttpClient;对于 HTML UI 为 AJAX)。

I don't need any indication of success or failure.

曾经吗?在这里,我们通常会发现“一劳永逸”实际上并不是人们想要的。真正的“即发即忘”意味着,如果后台操作从未完成或出现错误,那么日志中不会显示任何内容,一切都很好。

正如我上面所说,最好的选择是在客户端处理“异步”要求。但如果您确实需要在服务器上执行此操作,那么您有以下三个选项:

  1. 添加具有独立后端的持久队列(例如具有 Azure WebJob 的 Azure 队列)。您的网络应用程序只是将工作添加到队列中并返回。独立后端从队列中读取并进行实际处理。
  2. 使用类似 HangFire 的内容。这本质上是相同的,只是“队列”是一个数据库,并且后端与 ASP.NET 应用程序一起运行,而不是完全独立。
  3. 使用诸如 HostingEnvironment.QueueBackgroundWorkItem (.NET 4.5.2) 或我的 AspNetBackgroundTasks 之类的东西(.NET 4.5)。这是一个更危险的选择,因为没有可靠的存储空间。

关于asp.net - 异步/等待、TPL、WCF 服务、Web API : So many choices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937944/

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