Mar*_*ius 2 c# asp.net asynchronous async-await
让我说我有一个控制器动作不能异步(由于各种原因),但我有一个服务(通过几种方法)调用休息服务使用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);
}
Run Code Online (Sandbox Code Playgroud)
要么:
//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);
}
Run Code Online (Sandbox Code Playgroud)
通过使用异步客户端并将方法包装在Task.Run(()=> _myService.Get())中是否有任何好处.结果?
你最有可能获得的唯一一件事就是僵局.想想看,你在线程池线程上排队一个自然异步的方法,ASP.NET已经给你一个线程来处理你里面的Action.那没有多大意义.
如果你想要异步,并认为你实际上会从异步提供的规模中受益,那么你应该将你的控制器重新分配为异步并返回a Task<T>,你可以在那里使用await那些异步方法.
所以我要么保持同步,要么将代码从上到下重新分解以支持异步:
//MyController.cs
public async Task<ActionResult> GetSomethingAsync(int id)
{
//lots of stuff here
await GetAsync(id);
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |