【问题标题】:multi threading on asp.netasp.net 上的多线程
【发布时间】:2012-04-24 07:36:59
【问题描述】:

我没有为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}

【问题讨论】:

标签: c# asp.net multithreading


【解决方案1】:

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

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

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

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

// 3 票否决?

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

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

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

【讨论】:

  • 似乎是严厉的反对票?是否有可能:是的,但是如果您确实要小心未处理的异常,您可能应该使用其他东西。
【解决方案2】:

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

【讨论】:

  • 与其不断检查,您也可以在服务准备就绪时向其发送消息。
  • 是通过进程间调用不是吗?
  • 最简单的方法之一是调用 Windows 服务中托管的 WCF 服务。
  • 对,或者我们也可以使用简单的 MSMQ,无论如何感谢您的信息。
【解决方案3】:

您可以为此使用线程池。示例代码依赖于以下点赞文章: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 );

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

【讨论】:

  • 关于在 ASP.NET 网站上使用后台处理的警告。 IIS 可以在任何给定时刻回收应用程序,并在执行此操作时终止任何正在运行的后台线程。所以不能保证你的线程池线程会成功运行。如果这是个问题,最好使用 Windows 服务进行后台处理。
  • 在应用程序池被回收之前,您的应用程序将收到一个可以使用 Global.asax Application_End 方法捕获的事件。在这种方法中,您可以进行必要的检查并处理正在运行的线程(您的代码会变得有点复杂,因为您需要与正在运行的线程进行通信。
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多