异步等待与简单执行

时间:2018-06-25 22:42:16

标签: c# async-await

使用异步任务执行功能等待在当前线程中执行是否有好处?

[HttpGet]
[Route("example/{id}")]
public async Task<Example> GetExample(int id)
{
    return await exampleService.GetExampleAsync(id);
}

相比:

[HttpGet]
[Route("example/{id}")]
public Example GetExample(int id)
{
    return exampleService.GetExampleAsync(id).Result;
}

2 个答案:

答案 0 :(得分:0)

是的,没有等待的调用将阻塞您的执行,直到方法全部完成。

这很糟糕,它会使服务器速度变慢。当您使用await关键字时,.Net框架将让事情开始运行,以便可以处理下一个请求。

处理完成后,它将把响应返回给调用方。此外,异步/等待是新的老年男人!我希望这可以帮助

答案 1 :(得分:0)

两个样本之间的主要区别是第二个样本是同步样本和阻塞样本。没有很多理由阻止async代码,因为许多其他地方已经提到过。但是,您的第一个示例不必要地生成了状态机来处理不必要的async件。如果您在await方法内的async之后无事可做,只需返回Task

[HttpGet]
[Route("example/{id}")]
public Task<Example> GetExample(int id)
{
    return exampleService.GetExampleAsync(id);
}