WebAPI线程

EK_*_*Day 4 c# multithreading asp.net-web-api

所以我有一个在计算过程中有很长等待时间的函数.我有一个需要调用此函数的端点,但它并不关心函数的完成.

public HttpResponseMessage endPoint
{
    Repository repo= new Repository();
    // I want repo.computeLongFunction(); to be called, however this endpoint
    // can return a http status code "ok" even if the long function hasn't completed.

    repo.computeLongFunction();

    return Request.CreateReponse(HttpStatusCode.Ok);
}

// If I make the function async would that work?
public class Repository
{ 
    public void compluteLongFunction()
    { 

    }
}
Run Code Online (Sandbox Code Playgroud)

Cra*_* W. 5

使用任务并行库(TPL)来分离新线程.

Task.Run(() => new Repository().computeLongFunction());
return Request.CreateReponse(HttpStatusCode.Ok);
Run Code Online (Sandbox Code Playgroud)

  • 通过Task.Run旋转新的任务实际上并不创建新的线程.computeLongFunction工作项将被安排在资源可用时立即运行.所以是的,这是一个很好的方法,尤其是在ASP.NET应用程序中运行时; 最好避免直接创建线程. (2认同)