在Web API中正确使用async/await

4 .net c# asp.net asp.net-mvc asp.net-web-api

我有一个现有的业务库,我想使用Web API公开它.我现有的业务类看起来像

public class Business
{
    public bool DoSomeBusiness()
    {
        //Performing long running  DB operations
        return true;
    }
    //Other methods
}
Run Code Online (Sandbox Code Playgroud)

我正在编写一个Web API方法,如下面的代码和使用asyn/await以获得更好的可伸缩性.

public class SampleController : ApiController
{
    Business _business;
    public ValuesController(Business business)
    {
       _business = business;
    }
    public async Task<HttpResponseMessage> Get()
    {
       var result= await Task.Run(() => _business.DoSomeBusiness());
       return Request.CreateResponse(HttpStatusCode.OK, result);
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法是否正确?我是否会获得异步行为的真正好处?我不想更改现有的业务层实现,以使它们基于任务.

usr*_*usr 9

这没有任何结果.如果是这样,ASP.NET可以自动在Task.Run调用中运行您的操作,并实现更好的可伸缩性.

你不能欺骗这个.您需要一直使用async到您正在制作的IO.这会感染一切,这就是为什么在需要时而不是默认情况下应该这样做的原因.

我会链接你关于做出这个选择的两个基本帖子,因为现在你不了解这个主题足以做出选择:

/sf/answers/1756109141/为什么EF 6教程使用异步调用? /sf/answers/895769801/默认情况下我们应该切换到使用异步I/O吗?