Есть ли какие-либо преимущества для использования CancellationTokenSource над логическим полем volatile для передачи сигнала Task
?CancellationTokenSource vs. volatile boolean
ответ
Конечно, да. Здесь очень много. Я перечислил несколько.
CancellationToken
поддерживает обратные вызовы. Вы можете получать уведомления, когда запрашивается аннулирование.CancellationToken
поддерживаетWaitHandle
, что вы можете ждать бесконечно или с таймаутом.- Вы можете запланировать отмену
CancellationToken
с использованием методаCancellationTokenSource.CancelAfter
. - Вы можете связать свой номер
CancellationToken
с другим, так что, когда он отменяется, другой может считаться аннулированным. - К
Task
Если вы имеете в видуSystem.Threading.Tasks.Task
, то volatile boolean не может перевести состояние задачи на отмену, но можетCancellationToken
.
А также [вот интересная статья от Эрика Липперта] (http: // blogs .msdn.com/b/ericlippert/archive/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three.aspx), объясняя, почему он думает, что вы не должны использовать 'volatile'. –
Это очень полно, спасибо. – Yoav
@ MatthewWatson: чтобы быть справедливым, главным возражением Эрика кажется, что часто очень сложно использовать 'volatile' правильно, и что' lock' обычно имеет достаточную производительность и семантически легче понять. Простой флаг «volatile», который сигнализирует о прекращении задачи, хотя и нежелателен по другим причинам, не тот, о чем Эрик, похоже, интересует в своей статье. –
- 1. volatile vs Atomic boolean
- 2. Volatile boolean vs AtomicBoolean
- 3. volatile boolean
- 4. Статическая переменная vs Volatile
- 5. Synchornized vs volatile, который использовать?
- 6. memory_order_relaxed load vs volatile load
- 7. volatile vs. mutable в C++
- 8. volatile vs threadLocal в java
- 9. Когда предпочтительнее использовать volatile boolean в Java, а не AtomicBoolean?
- 10. CancellationTokenSource misbehavior
- 11. Использование CancellationTokenSource
- 12. Как вывести тип с помощью функции remove_cv (const volatile int * vs const volatile int vs int * const volatile)
- 13. static public boolean vs public static boolean
- 14. Java trie node Boolean vs boolean
- 15. Использование enum vs Boolean?
- 16. BOOL vs Boolean
- 17. boolean Vs. байт
- 18. Swift - Bool vs Boolean
- 19. lock vs boolean
- 20. java bean boolean filed to json & boolean vs Boolean
- 21. C# string vs String, bool vs Boolean
- 22. Разница между Atomic set vs volatile set в Java?
- 23. Java-поток не отвечает на volatile boolean flag
- 24. instanceof vs boolean type check
- 25. webstorm: typescript bool vs. boolean
- 26. Pandas Merge vs. Boolean Indexing
- 27. CancellationTokenSource нужен совет
- 28. CancellationTokenSource, Когда распоряжаться?
- 29. ObjectDisposedException: CancellationTokenSource был удален
- 30. ли CancellationTokenSource выключая правильно
«CancellationToken» не предназначен для того, чтобы сигнализировать о завершении потока, он предназначен для указания операции «Задача» на «отменить». Если вы хотите вернуть «Задачу», просто используйте оператор 'return'. –
Поскольку есть нагрузка стандартных классов Threading C# (включая Task), которые используют 'CancellationTokenSource' в своих интерфейсах, то это то, что вы должны использовать. –
@ YuvalItzchakov, если я не ошибаюсь, мне все равно нужно обрабатывать то, как заканчиваются мои задачи при использовании объекта CancelationTokeSource (т.е. возврат или перерыв). – Yoav