将方法抛出到Task中以避免阻塞asp.net线程

Bui*_*ted 11 c# asp.net task

我想知道以下代码是否有任何我在网络服务器上运行时不知道的问题.阅读优秀的系列丛书http://reedcopsey.com/series/parallelism-in-net4/我无法找到与我的问题有关的任何内容,与msdn相同,所以我想我会把它带到这里.

示例电话:

public ActionResult Index() {
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    Task.Factory.StartNew(() => {
        //This is some long completing task that I don't care about
        //Say logging to the database or updating certain information
        System.Threading.Thread.Sleep(10000);
    });

    return View();
}
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 5

ASP.Net支持异步页面,请参阅ASP.NET中的异步页面,但它是一个复杂的编程模型,并不与MVC完全绑定.话虽这么说,从同步请求处理程序启动异步任务可以解决问题:

  • 如果请求添加新任务的速率超过平均处理速率,您的进程最终将崩溃.任务占用了实时内存,最终它们将填满存储它们的内存队列,并且您将开始无法提交.
  • .Net Taks本身就不可靠,因为它们缺少持久存储,因此所有提交异步的任务必须作为'abandonware'进行线程化,即.如果它们永远不会完成,那么应用程序或提出请求的用户都不会有任何损失.如果任务很重要,那么它必须通过一个可靠的机制提交,该机制保证在出现故障时执行,如异步程序执行中提供的那样.