gpt4 book ai didi

c# - 后台线程是个坏主意吗?为什么?

转载 作者:太空狗 更新时间:2023-10-29 19:59:07 26 4
gpt4 key购买 nike

所以我被告知我在这里做的事情是错误的,但我不确定为什么。

我有一个网页,该网页导入带有文档编号的 CSV 文件以执行昂贵的操作。我已将昂贵的操作放入后台线程以防止它阻塞应用程序。简而言之,这是我的全部内容。

protected void ButtonUpload_Click(object sender, EventArgs e)
{
if (FileUploadCSV.HasFile)
{
string fileText;
using (var sr = new StreamReader(FileUploadCSV.FileContent))
{
fileText = sr.ReadToEnd();
}

var documentNumbers = fileText.Split(new[] {',', '\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);

ThreadStart threadStart = () => AnotherClass.ExpensiveOperation(documentNumbers);
var thread = new Thread(threadStart) {IsBackground = true};
thread.Start();
}
}

(显然有一些错误检查和用户抛出的消息)

所以我的三重问题是:

  • a)这是个坏主意吗?
  • b) 为什么这是个坏主意?
  • c)你会怎么做?

最佳答案

一个可能的问题是您的后台线程正在您的网站应用程序池中运行。 IIS 可能会决定回收您的应用程序池,导致昂贵的操作在完成之前被终止。

我宁愿选择一个我有一个单独进程的选项,可能是一个 Windows 服务,它会获取昂贵的操作请求并在 asp.net 进程之外执行它们。这不仅意味着您的昂贵操作可以在应用程序池重启后继续存在,而且还可以简化您的 Web 应用程序,因为它不必处理这些过程。

告诉服务执行昂贵的进程可以使用某种进程间通信来完成,服务可以轮询数据库表或文件,或者您可以使用服务将监听的管理队列。

有很多方法可以做到这一点,但我的主要观点是,如果可能,您应该将昂贵的过程与您的 Web 应用程序分开。

关于c# - 后台线程是个坏主意吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869355/

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