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;
}
Le tout fin et clair, la connexion sera supprimée en fin de champ.
Mais resharper suggère de le changer pour:
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?
Similaire à using (...)
utilise IDispose
pour nettoyer les ressources, await using (...)
utilise IAsyncDisposable . Cela permet d'effectuer également des tâches chronophages (par exemple impliquant des E/S) lors du nettoyage sans blocage.
Si SqlConnection
implémente l'interface IAsyncDisposable
, Resharper vous propose de passer à await using
pour le supprimer de façon asynchrone en utilisant DisposeAsync
méthode
public interface IAsyncDisposable
{
ValueTask DisposeAsync();
}