相关疑难解决方法(0)

Task.Run是否被认为是ASP .NET MVC Web应用程序中的不良做法?

背景

我们目前正在开发一个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)

问题

  • 在异步Web API控制器中使用Task.Run进行cpu绑定操作是否有任何性能优势?
  • ConfigureAwait(false)是否真的避免创建额外的线程?

c# asp.net asp.net-mvc task-parallel-library async-await

47
推荐指数
3
解决办法
2万
查看次数