web-dev-qa-db-fra.com

Quelle est la différence entre l'utilisation et l'attente de l'utilisation? Et comment puis-je décider lequel utiliser?

J'ai remarqué que dans certains cas, Visual Studio recommande de le faire

await using var disposable = new Disposable();
// Do something

au lieu de cela

using var disposable = new Disposable();
// Do something

Quelle est la différence entre using et await using?

Comment dois-je décider lequel utiliser?

19
Justin Lessard

Synchronisation classique à l'aide

L'utilisation classique appelle la méthode Dispose() d'un objet implémentant l'interface IDisposable.

using var disposable = new Disposable();
// Do Something...

Est équivalent à

IDisposable disposable = new Disposable();
try
{
    // Do Something...
}
finally
{
    disposable.Dispose();
}

Nouvelle asynchrone en attente d'utilisation

Les nouveaux attendent d'utiliser des appels et attendent la méthode DisposeAsync() d'un objet implémentant l'interface IAsyncDisposable.

await using var disposable = new AsyncDisposable();
// Do Something...

Est équivalent à

IAsyncDisposable disposable = new AsyncDisposable();
try
{
    // Do Something...
}
finally
{
    await disposable.DisposeAsync();
}

IAsyncDisposable Interface a été ajouté dans .NET Core 3.0 Et .NET Standard 2.1.

Dans .NET, les classes qui possèdent des ressources non managées implémentent généralement l'interface IDisposable pour fournir un mécanisme de libération synchrone des ressources non managées. Cependant, dans certains cas, ils doivent fournir un mécanisme asynchrone pour libérer des ressources non gérées en plus (ou à la place) de la ressource synchrone . La fourniture d'un tel mécanisme permet au consommateur d'effectuer des opérations d'élimination à forte intensité de ressources sans bloquer le thread principal d'une application GUI pendant une longue période.

La méthode IAsyncDisposable.DisposeAsync de cette interface renvoie un ValueTask qui représente l'opération de suppression asynchrone. Les classes qui possèdent des ressources non managées implémentent cette méthode, et le consommateur de ces classes appelle cette méthode sur un objet lorsqu'il n'est plus nécessaire.

27
Justin Lessard