【问题标题】:'await' on left side of assigment [duplicate]分配左侧的“等待”[重复]
【发布时间】:2021-12-29 08:26:02
【问题描述】:

我正在查看Microsoft Playwright 上的一些示例代码,在示例代码中,有这个位

public static async Task Main()
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.GotoAsync("https://playwright.dev/dotnet");
    await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });
}

第 4 行中的第一个 await 有什么作用?我已尝试搜索它,但找不到任何文档。

【问题讨论】:

  • await using 语法意味着处理使用DisposeAsync 而不是Dispose
  • 这能回答你的问题吗? C# 8 understanding await using syntax
  • 作业左侧并没有真正的等待。为了清楚起见,您可以将其分成两行 var browser = await playwright.Chromium.LaunchAsync(); 然后 await using browser;

标签: c#


【解决方案1】:

来自docs

您使用await using 语句来处理异步一次性对象,即实现IAsyncDisposable 接口的类型的对象。有关详细信息,请参阅实现 DisposeAsync 方法一文的 Using async disposable 部分。

IAsyncDisposable用于异步释放非托管资源。

【讨论】:

    【解决方案2】:

    如果你在谈论:

    await using var browser = await playwright.Chromium.LaunchAsync();
    

    行,那么这不仅仅是一个作业,而是在 C# 8 中添加的两个功能组合 - asynchronous disposable:

    从 C# 8.0 开始,该语言支持实现 System.IAsyncDisposable 接口的异步一次性类型。您可以使用 await using 语句来处理异步一次性对象。

    using declarations:

    using 声明是一个以using keyword 开头的变量声明。它告诉编译器被声明的变量应该被放置在封闭范围的末尾。

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多