В синхронном мире C # делает управление всем одноразовым действительно довольно простым:
using(IDisposable someDisposable=bla.bla())
{
//do our bidding
}
//don't worry too much about it
Однако, когда мы переходим в асинхронный режим, у нас больше нет удобства с использованием блока
. Одна из лучших стратегий, с которыми я столкнулся, - это итератор CCR , который позволяет нам использовать асинхронный код «как если бы он был синхронным». Это означает, что мы можем сохранить наш блок using
в обработчике итератора и не слишком увязнуть в сложном решении о том, когда удалять и перехватить все случаи, когда требуется удаление.
Однако во многих случаях , вызов CCR может показаться излишним, и, честно говоря, хотя мне вполне комфортно с CCR, для непосвященных это может показаться двойным голландским.
Итак, мой вопрос: какие еще стратегии существуют для управления IDisposable, когда одноразовые объекты должны сохраняться за пределами непосредственной области действия?