关闭 .NET Core 应用程序时 DisposeAsync 方法死锁

DisposeAsync method deadlocks when shutting down a .NET Core App

在我的 .NET 5 控制台应用程序中,我有一个实现 IAsyncDisposable 的 class,因为它需要调用第三方库的异步关闭方法,如下所示:

    public async ValueTask DisposeAsync()
   {
        await thirdParyLib.ShutDownAsync();
   }

将 class 与 classic using 语句一起使用时,这可以正常工作。

但是,当我在 .NET Core 的依赖注入机制(作为单例)中注册 class 时,我遇到了问题。

特别是,当 .NET Core 应用程序停止 DI 框架时,DI 框架会自动(并正确地)在所有已注册的单例实例上调用 DisposeAsync()。这将是完美的,但问题是此时代码挂在这里:

await thirdParyLib.ShutDownAsync();

我假设线程死锁了,但我不知道如何进一步诊断和解决问题。有什么想法吗?

好吧,我在我的具体情况下找到了解决方案,即直接调用第三方对象上的 Dispose(),而不是有问题的专用异步方法。