我们目前正在开发一个Web应用程序,它依赖于ASP .NET MVC 5,Angular.JS 1.4,Web API 2和Entity Framework 6.出于可伸缩性的原因,Web应用程序的重量依赖于async/await模式.我们的域需要一些cpu密集型计算,这可能需要几秒钟(<10s).在过去,一些团队成员使用Task.Run,以加快计算速度.因为在ASP .NET MVC或Web API控制器中启动一个额外的线程被认为是一种不好的做法(该线程不为IIS所知,所以不是在AppDomain Recycle上考虑=>参见Stephen Cleary的博客文章),他们使用了ConfigureAwait(false).
public async Task CalculateAsync(double param1, double param2)
{
// CalculateSync is synchronous and cpu-intensive (<10s)
await Task.Run(() => this.CalculateSync(param1, param2))).ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)