1

我没有为 asp.net 使用多线程。我有一个将大型临时文件上传到文件夹的 Web 应用程序。我想拿那个临时文件并在它上传后用它做一些其他的事情。我可以在用户不再在网站上的情况下在另一个线程上完成这项工作吗?感谢您的任何帮助或建议。

1.用户发布大文件 2.上传临时到服务器 3.上传完成后。我想运行另一个无需任何用户迭代即可运行但由用户触发的线程/工作者。

void uploading(){
//Uploading file To server
}
void Submitclick(){
Start a Thread 
Thread thread = new Thread(DoThreadWork);// does the user still need to be logged in?
Send to another page
}
void DoThreadWork(){Do this in background}
4

3 回答 3

8

这绝对是可能的,我在 ASP.NET 中使用了相当多的后台线程来做一些时髦的事情。如果您可以完全控制服务器,那么在单独的应用程序或 Windows 服务中运行后台代码可能会更优雅。

让您的 IIS 应用程序仅处理对 Web 请求的响应是一种更好的关注点分离,但它并没有为此做好准备。

还有一个警告,如果您在 ASP.NET 2.0 中有一个后台线程并且它有一个未处理的异常,则默认是重置应用程序池。

更多信息在这里:http: //blogs.msdn.com/b/tess/archive/2006/04/27/584927.aspx

// 3 票否决?

听着,并不总是可以避免在后台线程中运行某些东西。我在几种情况下遇到了这个问题:

  • 我曾在一家对软件持不合理态度的公司工作,不允许我们部署单独的应用程序来处理后台处理。我主张使用 Windows 服务,但被否决并被告知在后台线程中实现它。显然,我从那家公司搬到了一个更健康的环境,但事实是,有时你必须处理不合理的情况。
  • 如果您在托管环境中,您并不总是可以选择卸载到单独的进程。

问题是这是否可能。我正在回答这个问题。

于 2012-04-24T07:58:53.350 回答
0

如果您想将文件上传与网站用户交互分开,您可以创建一个 Windows 服务,该服务将持续检查文件是否已准备好上传并上传文件。

于 2012-04-24T07:44:22.423 回答
-1

您可以为此使用线程池。示例代码依赖于以下链接中的文章:http: //msdn.microsoft.com/en-us/library/3dasc8as (v=vs.80).aspx

首先编写完成工作的方法。该方法必须获得 1 个对象类型的参数:

 public void DoWork(object threadContext)
 {
 }

然后,在您要调用该方法的代码的位置执行以下操作:

 ...
 var threadParam = ... // Put any value you want to be used by the DoWork method
 ThreadPool.QueueUserWorkItem(DoWork, threadParam );

该方法将排队,直到系统将有空闲线程来处理工作并执行该方法,无论请求是否已结束。

于 2012-04-24T07:43:49.910 回答