如何从 class 终结器调用 DisposeAsync?

How do I invoke DisposeAsync from a class finalizer?

如果遇到以下情况,我该怎么办:我的 class 是一些第三方 class 的包装器,必须从包装的 class 调用异步方法=25=] 在我的 Dispose 里面? (见下面的代码)。 当然我会实现 IAsyncDisposable.

但是 Microsoft recommends disposables 能够从他们的 finalizers 中处理掉

我的问题是如何在这里进行操作?

the documentation example 中,如果终结器不支持 IDisposable,则仅异步一次性对象 (_asyncDisposableResource) 不会被丢弃。

顺便说一句,他们说异步方法最好不要支持同步对:请参阅 here,所以这种情况很可能发生。

    public class MyWrapperForTheRepository: IAsyncDisposable
    {
        private ThirdPartyRepository _wrappedRepository = new ThirdPartyRepository();

        public void MakeSomeChanges() => _wrappedRepository.MakeSomeChanges();


        public async ValueTask DisposeAsync()
        {
            await _wrappedRepository.SaveAllTheChangesAsync();
            _wrappedRepository = null;
        }

        ~MyWrapperForTheRepository()
        {
            ?????????????????????
        }
    }

But Microsoft recommends disposables to be able to be disposed from their finalizers

完全没有。事实上,终结器应该调用(无参数)Dispose(),并且它们也不应该调用DisposeAsync()

终结器用于处理非托管资源。就我个人而言,我建议每种类型 或者 都具有非托管资源 托管资源,但绝不能两者兼有。生成的代码比遵循 Dispose(bool disposing) 模式要干净得多。