可以说我有一个控制器操作,不能做异步(由于各种原因),但我有一个服务,(通过几种方法)使用HttpClient
调用休息服务。使用异步客户端并使用.Wait
或.Result
有什么好处?或者使用同步方法的性能会降低吗?当控制器动作同步时使用异步/等待的任何理由?
因此,要么:
//MyController.cs
public ActionResult GetSomething(int id)
{
//lots of stuff here
var processedResponse = _myService.Get(id);
//lots more stuff here
return new ContentResult(result);
}
//MyService.cs
public ProcessedResponse Get(int id)
{
var client = new HttpClient();
var result = client.Get(_url+id);
return Process(result);
}
或者:
//MyController.cs
public ActionResult GetSomething(int id)
{
//lots of stuff here
var processedResponse = _myService.GetAsync(id).Result;
//or, .Wait, or Task.Run(...), or something similar
//lots more stuff here
return new ContentResult(result);
}
//MyService.cs
public async Task<ProcessedResponse> GetAsync(int id)
{
var client = new HttpClient();
var result = await client.GetAsync(_url+id);
return await Process(result);
}
IMO,使服务方法'async'的唯一原因是将控制器操作重新写为'async'的计划。 – Dennis
@Marius:很想知道那些“各种原因”阻止异步控制器的原因。 –