【发布时间】:2016-06-06 12:17:25
【问题描述】:
我一直在使用 async/await 让我的脚湿透,我读到的大部分内容都是 “不要阻塞异步代码”,控制台应用程序中的 main 函数除外.我发现自己无法遵循这个简单的规则:(
我的应用程序严重依赖于 WebAPI 层。我在 MVC 应用程序中使用的客户端正在使用 System.Net.Http.HttpClient 上的异步方法来调用 API 方法。目前我正在以两种方式处理它。在某些地方,我们在调用客户端后立即得到结果:
//WebAPI Client
public object GetSomething(int id)
{
var task = _client_GetSomethingFromApiAsync(id);
var result = task.Result;
return result;
}
在其他使用异步一直到控制器的情况下。我正在使用 SiteFinity 并且不能使用异步控制器操作,所以我最终得到了这样的结果:
//WebAPI Client
public Task<object> GetSomethingAsync(int id)
{
return _client_GetSomethingFromApiAsync(id);
}
//Domain Service
public Task<object> GetSomethingDomainServiceAsync(int id)
{
return _service.GetSomethingAsync(id);
}
//Controller
public JsonResult GetSomethingControllerAction(int id)
{
var result = _domainService.GetSomethingDomainServiceAsync(viewModel.id).Result;
return Json(new { Success = true, Payload = result });
}
根据我的研究,这两种解决方案都不理想,尽管我没有遇到任何死锁问题,而且一切似乎都正常。有人可以帮我理解我应该遵循的最佳模式并解释原因吗?
谢谢!
【问题讨论】:
标签: c# asp.net-mvc asynchronous asp.net-web-api sitefinity