63 votes

Compréhension de C# 8 en attente d'utilisation de la syntaxe

J'ai la méthode suivante :

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

Tout va bien et est clair, la connexion sera éliminée à la fin de la portée.

Mais resharper suggère de le changer en :

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

Il ajoute attendre avant d'utiliser et le code est compilé avec succès. Qu'est-ce que cela signifie et quand devons-nous le faire?

98voto

Klaus Gütter Points 6263

Tout comme using (...) utilise IDispose pour nettoyer les ressources, await using (...) utilise IAsyncDisposable . Cela permet d'effectuer également des tâches fastidieuses (par exemple impliquant des E/S) lors du nettoyage sans blocage.

19voto

Pavel Anikhouski Points 18232

Si SqlConnection outils IAsyncDisposable interface, ReSharper vous propose de passer à await using de disposer en utilisant de manière asynchrone DisposeAsync méthode

 public interface IAsyncDisposable
{
    ValueTask DisposeAsync();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X