【发布时间】:2016-01-23 13:13:12
【问题描述】:
我有一个现有的业务库,我想使用 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);
}
}
这种方法正确吗?我会从异步行为中获得真正的好处吗?我不想更改我现有的业务层实现以使其基于任务。
【问题讨论】:
-
等待调用链应以 .NET Framework BCL 异步方法结束。您的
DoSomeBusiness仍然是一种同步方法,因此不会给您带来任何好处。对 async/await 的理解很容易出错,所以尽量深入挖掘,最好找一本好书。 -
你使用什么进行数据库操作?实体框架?原始 ADO.NET?将示例 db 调用添加到您的示例代码中,我应该能够引导您朝着正确的方向前进。
-
我们使用 ADO.NET 进行 db 调用。
标签: c# asp.net .net asp.net-mvc asp.net-web-api