You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何结合Using语句使用IAsyncDisposable接口?

在VB.NET(.NET 6)中使用IAsyncDisposable的方案

VB.NET在.NET 6版本中确实没有提供C#那样的await using语法糖,但依然可以合理利用IAsyncDisposable接口来异步释放资源,以下是几种可行方案:

方案一:手动结合Using与异步释放

如果你的类同时实现了IDisposable和IAsyncDisposable,VB.NET的Using语句只会自动调用同步的Dispose()方法。这种情况下,你可以在Using块内部完成操作后,手动调用DisposeAsync()并等待其完成:

Using resource As New MyAsyncDisposableResource()
    ' 执行资源相关操作
    Await resource.DoAsyncWork()
    ' 手动异步释放资源
    Await resource.DisposeAsync()
End Using

注意:如果你的类仅实现IAsyncDisposable而未实现IDisposable,则无法直接使用Using语句,此时可以通过Try/Finally块来管理生命周期:

Dim resource As New MyAsyncDisposableResource()
Try
Await resource.DoAsyncWork()
Finally
Await resource.DisposeAsync()
End Try

## 方案二:封装异步使用的辅助方法
你可以编写一个通用的扩展方法,模拟`await using`的行为,让代码更简洁且复用性更高:

```vb
Imports System.Runtime.CompilerServices

Module AsyncDisposableExtensions
    <Extension>
    Public Async Function AsyncUsing(Of T As IAsyncDisposable)(resource As T, action As Func(Of Task)) As Task
        Try
            Await action()
        Finally
            Await resource.DisposeAsync()
        End Try
    End Function

    ' 支持返回值的重载
    <Extension>
    Public Async Function AsyncUsing(Of T As IAsyncDisposable, TResult)(resource As T, func As Func(Of Task(Of TResult))) As Task(Of TResult)
        Try
            Return Await func()
        Finally
            Await resource.DisposeAsync()
        End Try
    End Function
End Module

使用方式如下:

Await New MyAsyncDisposableResource().AsyncUsing(Async Sub()
    Await resource.DoAsyncWork()
End Sub)

' 带返回值的场景
Dim result = Await New MyAsyncDisposableResource().AsyncUsing(Async Function()
    Return Await resource.GetAsyncResult()
End Function)

注意事项

  • 若类同时实现两个接口,避免在同步Dispose()中直接调用DisposeAsync().GetAwaiter().GetResult(),这种同步等待异步操作的方式容易引发死锁,仅在无其他选择的极端场景下考虑。
  • 优先确保DisposeAsync()实现正确,涵盖所有异步资源的释放逻辑(如HttpClient实例、数据库连接的异步关闭等)。

内容的提问来源于stack exchange,提问作者Keith Stein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:12:16