Skip to main content
  1. About
  2. For Teams
Asked
Viewed 88k times
173

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?

0

2 Answers 2

253

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.

Sign up to request clarification or add additional context in comments.

2 Comments

what is the consequence of using using when I could use await using?
using will call Dispose() rather than await DisposeAsync() and therefore unneccesarily block the current thread for some time. It depends on the type of object how undesirable the difference is.
42

If SqlConnection implements IAsyncDisposable interface, Resharper suggests you to switch to await using to dispose it asynchronously using DisposeAsync method

public interface IAsyncDisposable
{
    ValueTask DisposeAsync();
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.