我正在处理Http调用。
收到响应(HttpResponseMessage
)后,我想以字符串形式访问其内容:
string responseContent = responseMessage.Content.ReadAsStringAsync().Result;
现在,ReadAsStringAsync()
是异步的,但访问Result
绝对应该是同步的。
我测试了代码,不确定以下内容:
Result
?这个文档很容易回答:
访问属性的get访问器会阻塞调用线程,直到异步操作完成为止;它等效于调用Wait方法。
一旦操作结果可用,它将被存储并在随后对Result属性的调用中立即返回。请注意,如果在任务操作期间发生异常,或者任务已被取消,则Result属性不会返回值。相反,尝试访问属性值将引发AggregateException异常。
(强调我的)
直接回答您的问题;
正如@Camilo Terevinto所指出的那样,根据您所使用的上下文,这可能并不总是如您所愿。可能导致死锁。
原因是,如果您在存在上下文(例如UI上下文,ASP.NET请求上下文等)的情况下使用它,则其调用的内部机制.Wait()
可能导致死锁:它正在等待一个好时机将结果插入到当前上下文中,同时当前上下文正在阻塞以等待结果。您可能想看看Stephen Cleary的博客。您可以向下滚动到“导致死锁的原因”以了解更多信息。您也可以看看这个问题。
当然,理想的解决方案是在整个链中适当地使用async / await。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句