C# 8 understanding await using syntax

Issue

I have next method:

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;
}

Everything fine and clear, connection will be disposed at the end of scope.

But resharper suggests to change it to:

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;
}

It adds await before using and code is compiled successfully. What does it mean and when do we need to do that?

Solution

Similar as using (...) uses IDisposable to clean up resources, await using (...) uses IAsyncDisposable.
This allows to perform also time-consuming tasks (e.g involving I/O) on cleanup without blocking.

Answered By – Klaus Gütter

Answer Checked By – Senaida (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.