2012-04-07 88 views
2

我得到了一個頁面,我做一些文件操作,當文件完成後,我需要上傳到亞馬遜S3。有時文件可能很大,因此提交的用戶需要等待太久。我怎樣才能讓像如何調用一個函數,但不等待完成 - ASP.NET

  1. 文件操作
  2. 當完成後,我送文件名參數一些功能
  3. 我並不需要等待該功能,我想使用Response.Redirect上傳完成之前。
+0

您可以使用Ajax非同步上傳控制這一點,但不能高達重定向上傳完成。 – 2012-04-07 18:10:58

回答

9

最簡單的方法:

ThreadPool.QueueUserWorkItem(YourUploadMethod); 

有低於這個爭論的一些評論,所以我寫了這個:

protected void Page_Load(object sender, EventArgs e) 
    { 
     ThreadPool.QueueUserWorkItem(YourUploadMethod); 

     Response.Redirect("http://google.com"); 
    } 

    public void YourUploadMethod(object state) 
    { 
     Thread.Sleep(7000); 
    }// breakpoint: I was redirected to google and then debugger stopped me here 
+2

我不認爲這種方法適用於asp.net,因爲一旦主線程結束,後臺線程也會死掉(無論它們是否完成)。 – hofnarwillie 2012-04-07 18:20:37

+3

我認爲Response.End,Response.Redirect或Server.Transfer只會中止主線程。看到這個問題:http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful – 2012-04-07 18:47:12

+0

你是對的。我立場糾正。 :) – hofnarwillie 2012-04-07 19:06:53

1

您需要在不同的線程上啓動該方法 - 因爲您不必等待函數返回,所以不需要回調。

請參閱Thread類和Task類。要做到這一點

相關問題