asp.net上的多线程

时间:2012-04-24 07:36:59

标签: c# asp.net multithreading

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

1.User发布大文件 2.将temp上传到服务器 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}

3 个答案:

答案 0 :(得分:8)

这绝对有可能,我在ASP.NET中使用了很多背景线程来做一些时髦的东西。如果您完全控制服务器,则在单独的应用程序或Windows服务中运行后台代码可能更为优雅。

让您的IIS应用程序处理响应Web请求的问题更好地分离,而且还没有为此做好准备。

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

此处提供更多信息:http://blogs.msdn.com/b/tess/archive/2006/04/27/584927.aspx

// 3 downvotes?

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

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

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

答案 1 :(得分:0)

如果您要将文件上传与网站用户互动分开,您可以制作一个Windows服务,该服务将检查文件是否已准备好上传并上传文件。

答案 2 :(得分:-1)

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

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

 public void DoWork(object threadContext)
 {
 }

,而不是要在方法的位置调用方法:

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

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