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