我需要實現一個簡單的事務。對於這種情況,我的事務類實現了IDisposable接口。這樣我可以在using語句中使用我的事務類,並且如果在該範圍內發生任何錯誤,那麼在事務處理完成後,所有事情都會回滾。在IDisposable.Dispose()中使用異步調用
using (var transaction = new Transaction())
{
// do some stuff
}
的「做一些東西」還包括一些客戶端/服務器連接等
現在我回滾一切,如果「做一些東西」提出的任何錯誤。
public async void Dispose(){ // roll back everything on error }
這可能包括清理服務器上的一些資源,我需要調用異步操作。這導致我的問題:我可以安全地使用我的Dispose()實現的async關鍵字在其實現中啓用await關鍵字嗎?或者可能由於同步上下文問題或類似情況導致競爭條件?
一些有趣的閱讀http://blog.stephencleary.com/2013/03/async-oop-6-disposal.html – Gusdor