有时候您拥有一个组件,例如HttpClient
,仅提供异步方法。
当您可以“一直”进入异步事件处理程序或异步操作方法时,这很好,因为据我所知,执行返回到IIS管道,例如,它可以继续运行其他事情。 / p>
如果无法“一路攀升”,就必须在某个时候做类似.Result
的事情。
我的情况是托管WCF服务的Windows服务,该服务使用HttpClient
从API获取一些数据。我的代码处于受接口限制的方法中,该方法无法更改,也无济于事,因为该应用程序已经直接管理线程,而无需任何任务。
在这种情况下,最好是尽可能“一路向上”,最后立即阻止或阻止异步方法,并节省一路保存和恢复(等待)的复杂性和资源。顶部似乎没有理由吗?
答案 0 :(得分:0)
如果阻止异步操作,则很可能会出现死锁。选中此答案https://stackoverflow.com/a/39371523/2138959和其他问题的答案,以获取有关该主题的动力。
在一般情况下,我建议使用AsyncEx.Context。
这是C#Await, SynchronizationContext, and Console Apps: Part 3中async作者的精彩文章。