例如,如果遇到以下情況,我該怎么辦:我的類是某個第三方類的包裝器,并且必須從我的 Dispose 中的包裝類呼叫異步方法?(見下面的代碼)。當然我會實作 IAsyncDisposable。
但微軟建議一次性物品能夠從他們的終結器中處理掉
我的問題是我該怎么做?
在檔案示例 中,僅異步可處置物件 (_asyncDisposableResource) 在從終結器處置的情況下不會處置,如果它也不支持 IDisposable。
順便說一句,他們說最好不要支持異步方法的同步對:見這里,所以這種情況很可能發生。
public class MyWrapperForTheRepository: IAsyncDisposable
{
private ThirdPartyRepository _wrappedRepository = new ThirdPartyRepository();
public void MakeSomeChanges() => _wrappedRepository.MakeSomeChanges();
public async ValueTask DisposeAsync()
{
await _wrappedRepository.SaveAllTheChangesAsync();
_wrappedRepository = null;
}
~MyWrapperForTheRepository()
{
?????????????????????
}
}
uj5u.com熱心網友回復:
但微軟建議一次性物品能夠從他們的終結器中處理掉
一點也不。事實上,終結器不應該呼叫(the parameterless) Dispose(),它們也不應該呼叫DisposeAsync()。
終結器僅用于處置非托管資源。就個人而言,我建議每種型別都具有非托管資源或托管資源,并且永遠不要兩者兼有。生成的代碼比遵循Dispose(bool disposing)模式要干凈得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457630.html
