|
TPL. CancellationToken. Вопросы
|
|||
---|---|---|---|
#18+
Привет. Я похоже немного запутался. Есть пара вопросов. 1. Не могу уловить смысл передачи CancellationToken в метод Factory.StartNew (). Код: c# 1. 2. 3.
Зачем он передан в метод Generate понимаю (чтобы метод периодически его проверял). А зачем он передан отдельно в StartNew ? 2. Зачем нужно вызывать ThrowIfCancellationRequested ? Только для того, чтобы у задачи появился статус Canceled ? Ведь можно проверять IsCancellationRequested и мирно завершать задачу. Не совсем уловил, что происходит с исключением OperationCanceledException - нужно ли его ловить самому, или фреймворк его сам ловит. Объясните пожалуйста русским языком этот момент с его тонкостями, когда там исключение нужно ловить, а когда нет :) 3. Мне нужно запустить таск, который будет крутится очень долго (дней 7 без останова, предположим) - там будет создание WCF хоста. Как я понимаю, в этом случае рекомендуется использовать TaskCreationOptions.LongRunning. Так правильно ? Код: c# 1.
Не нашел метода без передачи TaskScheduler, надеюсь я правильно его передаю. И опять, зачем тут token второй раз передавать ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2014, 19:28 |
|
TPL. CancellationToken. Вопросы
|
|||
---|---|---|---|
#18+
PS. Есть мысль, что CancellationToken нужно передавать в StartNew именно для того, чтобы корректно работал ThrowIfCancellationRequested. Но механизм все же не совсем ясен. Объясните пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2014, 19:32 |
|
TPL. CancellationToken. Вопросы
|
|||
---|---|---|---|
#18+
Есть ответы ? Или не только я не понимаю ? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2014, 14:16 |
|
TPL. CancellationToken. Вопросы
|
|||
---|---|---|---|
#18+
MsSql_Study, Блин, просто заново копаться неохота, вспоминать. А неточные ответы только карму портят Вот куски кода: Код с сильными сокращениями Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
MsSql_StudyCancellationToken нужно передавать в StartNew именно для того, чтобы корректно работал ThrowIfCancellationRequested Это естественно MsSql_StudyТолько для того, чтобы у задачи появился статус Canceled ? Ведь можно проверять IsCancellationRequested и мирно завершать задачу. Нет, потому что есть цепочки тасков, последовательность вызова которых зависит от статуса завершения предыдущего ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2014, 14:31 |
|
TPL. CancellationToken. Вопросы
|
|||
---|---|---|---|
#18+
Arm79, Спасибо большое за прояснение. Я пишу программу с использованием TPL. Приходится использовать и Continuations'ы. Разбирась вот. Я уже увидел, что выброшенное исключение действительно влияет на цепочку. Местами мне это очень помогло, по другому даже не смог найти решения, пока не вспомнил про "продолжения". Теперь ясно, что выброс исключения ставит программу не в статус Faulted а в Canceled. Хотя и так догадывался, но пока не использовал этот механизм, т.е. не убедился "практически", и не хотел случайно сломать программу написав код, который не понимаю. Если подумать, я нарушил принцип в своей программе, т.к. останавливаю задачу через токенОтмены, но она при этом мирно завершается со статусом RanToCompletion :) Буду разбираться и углублять знания дальше. Спасибо за помощь. PS. А чего это вы "забыли" :) Tpl не оправдал надежд, и нашли что-то лучше ? Я вот думал о себе, что начав его применять перейду на него и это будет "основным режимом" так сказать, а некоторые смотрю уже отходят от него :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2014, 15:28 |
|
|
start [/forum/topic.php?desktop=1&fid=20&tid=1403161]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 479ms |
0 / 0 |