System.IAsyncDisposable 接口
本文提供了此 API 参考文档的补充说明。
在 .NET 中,拥有非托管资源的类通常实现 IDisposable 接口,以提供同步释放非托管资源的机制。 但是,在某些情况下,除了(或而不是)同步资源外,它们还需要提供一种异步机制来释放非托管资源。 提供此类机制使使用者能够执行资源密集型释放操作,而无需长时间阻止 GUI 应用程序的主线程。
IAsyncDisposable.DisposeAsync此接口的方法返回一个ValueTask表示异步释放操作的方法。 拥有非托管资源的类实现此方法,当不再需要此方法时,这些类的使用者会在对象上调用此方法。
异步方法与 async
C# 和 Visual Basic 中的和await
关键字 (keyword)结合使用。 有关详细信息,请参阅 C# 中的任务异步编程模型,或使用 Async 和 Await 进行异步编程(Visual Basic)。
使用实现 IAsyncDisposable 的对象
如果应用程序使用实现 IAsyncDisposable
的对象,则应在使用完该对象后调用该对象的 DisposeAsync 实现。 若要确保即使出现异常,也会将使用该IAsyncDisposable
对象的代码放入 using 语句(从版本 8.0 开始的 C# 中)或调用DisposeAsync语句子句try
/finally
中的finally
方法。 有关模式的详细信息 try
/finally
,请参阅 try-finally (C#) 或 Try...抓住。。。Finally Statement (Visual Basic)。
实现 IAsyncDisposable
你可能在以下情况下实现 IAsyncDisposable
:
- 开发拥有非托管资源的异步枚举器时。 异步枚举器与 C# 8.0 异步流功能一起使用。 有关异步流的详细信息,请参阅 教程:使用 C# 8.0 和 .NET Core 3.0 生成和使用异步流。
- 当类拥有非托管资源并释放它们需要资源密集型 I/O 操作时,例如将中间缓冲区的内容刷新到文件中或通过网络发送数据包以关闭连接。
DisposeAsync使用非托管资源(例如释放、释放或重置非托管资源)后,使用该方法执行所需的任何清理。 有关详细信息,请参阅 实现 DisposeAsync 方法。