2012-04-07 83 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类。要做到这一点

相关问题