使用语句和等待关键字在c#中很好地发挥
我有一个情况,我正在进行一个方法返回和IDisposable实例的async调用。 例如: 
 HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")); 
 现在async在现场之前,在使用IDisposable实例时,使用“响应”variables的这个调用和代码将被包装在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; } 
	
是的,那应该没问题。
在第一种情况下,你真的在说:
- asynchronous等待,直到我们可以得到响应
- 使用它并立即处理它
在第二种情况下,你说:
- asynchronous等待,直到我们可以得到响应
- asynchronous等待直到我们logging了响应
- 处理响应
 asynchronous方法中的using语句是“奇怪的”,因为Dispose调用可能会在不同的线程中执行到获取资源的线程(取决于同步上下文等),但它仍然会发生…假设你是当然,等待出现或失败。  (就像你不会在非asynchronous代码中调用Dispose ,如果你的using语句包含对永不返回的方法的调用)。