C# 8 理解 await 使用语法

C# 8 understanding await using syntax

我有下一个方法:

public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
    using var connection = new SqlConnection(_connectionString);

    var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");

    return allQuotes;
}

一切都很好,连接将在范围末尾处理。

但 resharper 建议将其更改为:

public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
    await using var connection = new SqlConnection(_connectionString);

    var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");

    return allQuotes;
}

在使用前添加了await,代码编译成功。这是什么意思,我们什么时候需要这样做?

类似于using (...)使用IDisposable清理资源,await using (...)使用IAsyncDisposable。 这允许在不阻塞的情况下执行耗时的清理任务(例如涉及 I/O)。

如果 SqlConnection 实现了 IAsyncDisposable 接口,Resharper 建议您切换到 await using 以使用 DisposeAsync method

异步处理它
public interface IAsyncDisposable
{
    ValueTask DisposeAsync();
}