- A TaskCompletionSource.SetResult и т. д. в той или иной форме может вызвать некоторое внешнее ожидание чтобы продолжить поток, в котором выполнялась фоновая задача, которая затем вызывала Dispose.
- Иногда фоновая задача вызывала обратный вызов/событие, и каким-то образом это в конечном итоге заканчивалось вызовом Dispose перед возвратом.
- li>
- Должен ли я избегать использования функций Dispose(), ожидающих завершения фоновых операций, и использовать какой-либо другой метод, чтобы гарантировать, что все остановлено, прежде чем вернуться из основного?
- Всегда ли это вина кода? вызов Dispose(), чтобы это произошло из «обратного вызова» (кажется, что многие библиотеки скажут это при использовании традиционных потоков, но потенциальное переключение контекста await foo значительно усложняет управление потоками)?
Следует ли избегать фоновых задач, вызывающих обратные вызовы в отдельном потоке (events/Action/Func, subject.OnNext(), TaskCompletionSource.SetResult() и т. д.)?
Подробнее здесь: https://stackoverflow.com/questions/790 ... g-deadlock