我有一种情况,我正在做一个async
调用一个返回和的方法IDisposable
实例。例如:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
现在以前async
当与一个人一起工作时,他就在现场IDisposable
例如,使用“response”变量的调用和代码将被包装在 using 语句中。
我的问题是,当async
关键字是否混入其中?即使代码可以编译,using 语句在下面的两个示例中是否仍然按预期工作?
实施例1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
实施例2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
是的,那应该没问题。
在第一种情况下,你实际上是在说:
在第二种情况下,你是说:
- 异步等待,直到我们可以得到响应
- 异步等待,直到我们记录响应
- 处理响应
A using
异步方法中的语句是“奇怪的”,因为Dispose
调用可能在与获取资源的线程不同的线程中执行(取决于同步上下文等),但它仍然会发生......假设您正在等待的事情ever当然,要么出现,要么失败。 (就像你最终不会打电话一样Dispose
在非异步代码中,如果您using
语句包含对永远不会返回的方法的调用。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)