我是否有必要在C#中加入我的主题

时间:2014-05-07 22:40:25

标签: c# asp.net multithreading join

我正在创建一个asp.net应用程序,我正在尝试使用单独的线程来允许用户将文件上传到服务器(当两个用户同时执行此操作时似乎存在很多冲突)。当用户点击页面时,我有一个pageLoad函数来处理我的逻辑:

public void UploadFile()
{
    //code to upload a file
}


protected void Page_Load(object sender, EventArgs e)
{
    Thread t1 = new Thread(UploadFile);

    t1.Start();
    t1.Join();     
}

我的问题是:是否真的有必要加入创建的线程?从其他一些帖子中,加入一个线程以使其不会意外终止似乎很重要。

如果有多个人同时运行此代码,“t1.Join()”会加入他们创建的当前线程吗?

2 个答案:

答案 0 :(得分:1)

  

我正在创建一个asp.net应用程序而我正在尝试使用单独的线程来允许用户将文件上传到服务器

在ASP.Net中启动自己的线程通常是不明智的。此类线程可能会意外终止,例如,如果应用程序域回收。

代码UploadFile将完全在服务器上运行。它不清楚该代码的作用,但它无法与用户的浏览器开始新的交互。

查看此Microsoft文档,该文档说明了如何编写代码以允许将文件上载到服务器。

http://support.microsoft.com/kb/323246

  

加入一个线程似乎很重要,这样它就不会意外终止

如果后台线程的程序终止,它将终止。通常建议让线程自行终止,因为它们的工作完成或对某种信号做出反应。

protected void Page_Load(object sender, EventArgs e)
{
    Thread t1 = new Thread(UploadFile);

    t1.Start();
    t1.Join();     
}

此代码仍将阻止Page_Load事件。即使它启动了一个新线程,它也会在返回之前等待该线程完成。如果删除Join(),则处理程序将在启动线程t1之后立即返回。

答案 1 :(得分:0)

您不需要使用线程上传文件,asp.net运行时实际上是一个多线程环境。