wpf ограничить холст в ячейке сетки

В то время как нормальное правило состоит в том, чтобы всегда вызывать Dispose() во всех реализациях IDisposable, Task и Task часто являются одним из случаев, когда лучше разрешить финализатору это.

Причина Task реализует IDisposable в основном из-за внутреннего WaitHandle. Это необходимо для правильной работы задач и используется только в случае продолжения задачи. Если продолжения не существует, метод Dispose Dispose не имеет реального эффекта - поэтому в этом случае это не требуется.

Как сказано, в большинстве случаев, когда есть продолжение задачи, это часто очень, очень трудно написать свой код таким образом, чтобы вы могли правильно вызвать Dispose (). Использование операторов обычно не работает с экземплярами Task, так как вызов Task обычно является асинхронным по своей природе. Очень легко избавиться от задачи слишком рано, особенно при использовании оператора using.

Если в вашем случае относительно просто сохранить ссылку на Задачу и правильно вызвать Dispose () , Я бы сделал это. Однако, если это приведет к тому, что ваша логика станет намного сложнее, я обычно делаю вид, что Task не является IDisposable и разрешает его очищать в финализаторе для задачи.

Для более подробной информации я бы рекомендовал прочитать этот поток на форумах MSDN , где Стивен Тууб описывает, почему Task реализует IDisposable в деталях, и дает аналогичные рекомендации моему предложению выше.

0
задан user1778608 5 March 2019 в 04:55
поделиться