using 语句和await 关键字在c# 中表现得很好吗

2024-03-05

我有一种情况,我正在做一个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(使用前将#替换为@)

using 语句和await 关键字在c# 中表现得很好吗 的相关文章