我有一个现有的业务库,我想使用 Web API 公开它。我现有的业务类看起来像
public class Business
{
public bool DoSomeBusiness()
{
//Performing long running DB operations
return true;
}
//Other methods
}
我正在编写一个 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);
}
}
这种方法是否正确?我会得到异步行为的真正好处吗?我不想更改我现有的业务层实现以使其基于任务。
最佳答案
这无济于事。如果是这样,ASP.NET 可以在 Task.Run 调用中自动运行您的操作并实现更好的可扩展性。
你不能作弊。您需要一直使用异步直到您正在制作的 IO。这会感染一切,这就是为什么应该在需要时而不是默认情况下这样做的原因。
我将给你链接两篇关于做出这个选择的基本帖子,因为现在你对这个主题的理解还不足以做出选择:
https://stackoverflow.com/a/25087273/122718为什么 EF 6 教程使用异步调用? https://stackoverflow.com/a/12796711/122718我们应该切换到默认使用异步 I/O 吗?
关于c# - 在 Web API 中正确使用 async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963879/