考虑这个例子中的代码:
在一些地方,他们的代码看起来像这样:
if (response.IsSuccessStatusCode)
{
product = await response.Content.ReadAsAsync<Product>();
}
return product;
我看到它的方式,如果await之后没有独立代码,那么使用async几乎没有什么好处。 (我知道有很多API只是* AsAsync(),所以在那些情况下我没有选择。)
或者我错过了什么?一直都是异步的,有没有好处?
答案 0 :(得分:4)
是的,有好处,因为我们没有阻止调用者对我们正在进行的操作进行阻塞,而不是同步调用。
想想它在Windows窗体应用程序中被调用为同步调用然后在按钮点击假设,然后应用程序将无响应,用户将无法执行任何操作,直到调用Web API方法完成s在许多情况下我们现在不想要的成功或失败,即保持应用程序响应以获得更好的用户体验。
基本目的是简化使用后台工作程序类执行长时间运行操作或I / O绑定操作的旧方法。异步执行将导致不阻止调用者代码,并从操作返回结果时从它离开的位置继续。
因此,在上述情况下,调用Web API方法会涉及网络延迟,并且可能需要超过正常时间,如果我们不是异步调用它,则会阻止调用代码或线程,直到返回结果。
澄清调用异步方法而不等待不会阻塞,但是你的控制将流过,你将无法访问结果,而等待将保留该上下文,而不必等待你必须等待它完成并阻止它比如Async().Result
,其中ofcoruse意味着同步调用异步方法。
希望有所帮助