System.IAsyncDisposable 接口

本文提供了此 API 参考文档的补充说明。

在 .NET 中,拥有非托管资源的类通常实现 IDisposable 接口,以提供同步释放非托管资源的机制。 但是,在某些情况下,除了(或而不是)同步资源外,它们还需要提供一种异步机制来释放非托管资源。 提供此类机制使消费者能够执行资源密集型的释放操作,而无需长时间阻塞 GUI 应用程序的主线程。

此接口的 IAsyncDisposable.DisposeAsync 方法返回一个表示异步处置操作的 ValueTask。 拥有非托管资源的类实现此方法,当不再需要此方法时,这些类的使用者会在对象上调用此方法。

异步方法与 C# 和 Visual Basic 中的 asyncawait 关键字结合使用。 有关详细信息,请参阅 C# 中的任务异步编程模型,或使用 Async 和 Await 进行异步编程(Visual Basic)。

使用实现 IAsyncDisposable 的对象

如果应用程序使用实现 IAsyncDisposable的对象,则应在使用完该对象后调用该对象的 DisposeAsync 实现。 为了确保即使在出现异常时也能释放资源,可以将使用IAsyncDisposable对象的代码放入using语句中(适用于从C# 8.0版本开始),或者在DisposeAsyncfinallytry语句的/子句中调用finally方法。 有关try/finally模式的详细信息,请参阅try-finally(C#)或Try...Catch...Finally 语句(Visual Basic)。

实现 IAsyncDisposable

你可能在以下情况下实现 IAsyncDisposable

  • 在开发拥有非托管资源的异步枚举器时。 异步枚举器与 C# 8.0 异步流功能一起使用。 有关异步流的详细信息,请参阅 教程:使用 C# 8.0 和 .NET Core 3.0 生成和使用异步流
  • 。当类拥有非托管资源并释放它们时,需要进行资源密集型 I/O 操作,例如将中间缓冲区的内容刷新到文件中或通过网络发送数据包以关闭连接。

使用 DisposeAsync 方法在使用非托管资源后执行任何必要的清理,例如释放、松开或重置这些资源。 有关详细信息,请参阅 实现 DisposeAsync 方法