с лайфтаймами, и в неё становится возможным складывать асинк терминаторы и асинк диспозаблы.
И если кто-то положил туда асинк, а я потом зову синк диспоз лайфтайма — то инженер Гарин в меня стреляет из разъеболоида.
Кто-то один сложил, а нахуй пошли все. Круговая порука получается?
Не совсем понимаю в чем тут спор, раз выше уже согласились, что класить IAsyncDisposable должно быть возможно только в AsyncLifetimeDefinition, которое нельзя синхронно задиспоузить.
собсно, https://github.com/dotnet/reactive/blob/main/AsyncRx.NET/System.Reactive.Async/Disposables/CompositeAsyncDisposable.cs
О, а вот это прикольная штука, почти то что надо.
https://github.com/dotnet/reactive/blob/f4f727cf413c5ea7a704cdd4cd9b4a3371105fa8/AsyncRx.NET/System.Reactive.Async/Disposables/CompositeAsyncDisposable.cs#L106 они прям жосткие
А почему не разделить синк и асинк на разные коллекции, и при синк диспоузе вызывать синк, а в асинке -- асинк
Тогда синк диспоз оставит асинк недиспознутым? Не то, что ожидается.
А почему не ожидается?
Ожидается, что объект нужно диспозить один раз. Все дотнет объекты так работают. В том числе и такие, которые реализуют оба вида диспоза.
Вообще, ожидается. Мс так и пишет. Если вы реализовали асинк без синка, то можете потечь.
Там написано, в каком случае может потечь. Только для очень тупого клиента.
Идеальный дизайн библиотеки должен предлагать перегрузку, которая принимает либо IDisposable, либо IAsyncDisposable. Тогда для её удовлетворения пользователь будет избегать делать и то и другое в одном типе. А в крайнем случае будет кастовать куда надо явно.
Обсуждают сегодня