我得到了一個頁面,我做一些文件操作,當文件完成後,我需要上傳到亞馬遜S3。有時文件可能很大,因此提交的用戶需要等待太久。我怎樣才能讓像如何調用一個函數,但不等待完成 - ASP.NET
- 文件操作
- 當完成後,我送文件名參數一些功能
- 我並不需要等待該功能,我想使用Response.Redirect上傳完成之前。
我得到了一個頁面,我做一些文件操作,當文件完成後,我需要上傳到亞馬遜S3。有時文件可能很大,因此提交的用戶需要等待太久。我怎樣才能讓像如何調用一個函數,但不等待完成 - ASP.NET
最簡單的方法:
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
我不認爲這種方法適用於asp.net,因爲一旦主線程結束,後臺線程也會死掉(無論它們是否完成)。 – hofnarwillie 2012-04-07 18:20:37
我認爲Response.End,Response.Redirect或Server.Transfer只會中止主線程。看到這個問題:http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful – 2012-04-07 18:47:12
你是對的。我立場糾正。 :) – hofnarwillie 2012-04-07 19:06:53
您可以使用Ajax非同步上傳控制這一點,但不能高達重定向上傳完成。 – 2012-04-07 18:10:58