【问题标题】:ASP.NET Processing in the backgroundASP.NET 在后台处理
【发布时间】:2013-08-21 13:30:08
【问题描述】:

有没有办法在后台将文件从 URL 下载到服务器?提交表单时,后台自动处理文件上传,无需等待文件上传。

在 Windows 应用程序中,有 BackgroundWorker 类。但是 ASP.NET 呢?

【问题讨论】:

标签: c# asp.net webforms backgroundworker


【解决方案1】:

这不是您希望在响应线程上运行的那种事情,因为它会延迟对用户的响应,直到文件可以下载和处理。它更适合在计算机上作为服务运行的不同线程(或 Azure Worker Role),它将为您执行这些项目。

但是,如果您真的想要(或必须)通过 IIS/ASP.net 运行它,并且如果您不关心向用户返回任何内容,则可以在不同的线程中运行所有逻辑或通过异步调用的委托。有关异步运行委托的示例,请参见 this answer(从那里引用)。

private delegate void DoStuff(); //delegate for the action

protected void Button1_Click(object sender, EventArgs e)
{
    //create the delegate
    DoStuff myAction = new DoStuff(DownloadStuff); 

    //invoke it asynchronously, control passes to next statement
    myAction.BeginInvoke(null, null);
}

private void DownloadStuff() { 
  // your functionality here - this can also go in a code library
}

请参阅MSDN 了解有关如何使用委托的更多信息(包括使用参数传递信息)。

【讨论】:

  • 另外提醒一下,没有任何上下文实例可用,因此需要使用线程启动参数传入对这些对象或其属性值的引用。这包括 HttpContext.Current,以及 Session、Request、Response、Application 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2011-03-04
  • 2020-04-13
  • 2012-02-22
相关资源
最近更新 更多