Interface System.IAsyncDisposable

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

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 permettant de libérer des ressources non managées de manière synchrone. Toutefois, dans certains cas, ils doivent fournir un mécanisme asynchrone pour libérer des ressources non managées en plus (ou au lieu de) l’un synchrone. Fournir un tel mécanisme permet au consommateur d’effectuer des opérations de suppression gourmandes en ressources sans bloquer le thread principal d’une application GUI pendant longtemps.

La IAsyncDisposable.DisposeAsync méthode de cette interface retourne 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’elle n’est plus nécessaire.

Les méthodes asynchrones sont utilisées conjointement avec les asyncawait mot clé et les mot clé en C# et Visual Basic. Pour plus d’informations, consultez Le modèle de programmation asynchrone de tâche en C# ou Programmation asynchrone avec Async et Await (Visual Basic).

Utiliser un objet qui implémente IAsyncDisposable

Si votre application utilise un objet qui implémente IAsyncDisposable, vous devez appeler l’implémentation de DisposeAsync l’objet lorsque vous avez terminé de l’utiliser. Pour vous assurer que les ressources sont publiées même en cas d’exception, placez le code qui utilise l’objet IAsyncDisposable dans l’instruction using (en C# commençant à partir de la version 8.0) ou appelez la DisposeAsync méthode à l’intérieur d’une finally clause de l’instruction/tryfinally. Pour plus d’informations sur le try/finally modèle, consultez try-finally (C#) ou Try... Catch... Enfin, instruction (Visual Basic).

Implémenter IAsyncDisposable

Vous pouvez implémenter IAsyncDisposable dans les situations suivantes :

  • Lors du développement d’un énumérateur asynchrone qui possède des ressources non managées. Les énumérateurs asynchrones sont utilisés avec la fonctionnalité de flux asynchrones C# 8.0. Pour plus d’informations sur les flux asynchrones, consultez Tutoriel : Générer et consommer des flux asynchrones à l’aide de C# 8.0 et .NET Core 3.0.
  • Lorsque votre classe possède des ressources non managées et qu’elle les libère nécessite une opération d’E/S gourmande en ressources, telle que le vidage du contenu d’une mémoire tampon intermédiaire dans un fichier ou l’envoi d’un paquet sur un réseau pour fermer une connexion.

Utilisez la DisposeAsync méthode pour effectuer les propre up nécessaires après avoir utilisé les ressources non managées, telles que la libération, la libération ou la réinitialisation des ressources non managées. Pour plus d’informations, consultez Implémenter une méthode DisposeAsync.