1. ホーム
  2. c#

[解決済み] C# 8 構文によるawaitの理解 [重複]。

2023-07-02 16:14:56

質問

<余談
この質問には、すでにここで回答があります :
クローズド 2年前 .

次のメソッドがあります。

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 を含む) もブロックせずにクリーンアップで実行できるようになります。