С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 57
.NET 4.x

CancellationToken.Cancel() отменяет весь поток задач, созданных TaskFactory

09.10.2015, 02:49. Показов 1253. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, есть таскфактори, связанный с TaskScheduler(создавал его разными конструкторами), например, сейчас выглядит так:
C#
1
2
_factory = new TaskFactory(_cts.Token, TaskCreationOptions.DenyChildAttach,
                TaskContinuationOptions.DenyChildAttach, _scheduler);
Внутри TaskScheduler'a - TaskQueue

По нажатию на кнопку генерятся таски:
C#
1
var t = _factory.StartNew(() => DoWork(0,_cts.Token), _cts.Token);
токен отмены - поле класса формы
C#
1
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
таски выполняются подряд один за другим

По нажатию на другую кнопку должен отмениться таск, который сейчас выполняется.
C#
1
2
3
4
5
6
        private void button2_Click(object sender, EventArgs e)
        {
            _logger.Info("Initialized cancelling of current thread");
            _cts.Cancel();
            _currentNumberOfThreads--;
        }
Так вот, после выполнения процедуры отмены свойство IsCancelled меняется на true у всех тасков очереди. В этом вся проблема.

Я чувствую, что надо как-то "поиграть" с атрибутами при создании TaskFactory и что все связано с присоединенными и отсоединенными тасками, но шут его знает, в общем.

Буду благодарен за любые идеи.

Если что, код можно посмотреть в репе
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2015, 02:49
Ответы с готовыми решениями:

Завершение массива задач Task с использованием CancellationToken
В продолжение темы. https://www.cyberforum.ru/csharp-beginners/thread1299866.html#post6867334 к Backgroundworker это уже не относится. ...

BlockingCollection<T>, Add(T item, CancellationToken cancellationToken);
Возник вопрос в механизме метода Add() BlockingCollection. В реализации BlockingCollection есть возможность добавить как элемент...

Пока поток выполняется, весь GUI виснет
Есть функция и поток, откуда она вызывается. Проблема в том, что, пока поток выполняется, весь GUI виснет. Функция воспроизводит музыку,...

5
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
09.10.2015, 04:57
Мне почему-то кажется что для каждого Task в вашем случае нужно создавать отдельный CancellationTokenSource.
0
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 57
09.10.2015, 09:03  [ТС]
Да, логично, я тоже думал об этом. Но тут две проблемы:

1. https://msdn.microsoft.com/en-... 10%29.aspx
тут вроде аналогично, а работает нормально.
2. мне нужно знать токен для текущего таска в любой момент времени, чтобы его отменить по нажатию кнопки. и мыслей, как организовать их хранение у меня нет:С
можно конечно запилить свойство, которое токен хранит, но правильно ли вощще так делать?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.10.2015, 10:19
Цитата Сообщение от Staple Stable Посмотреть сообщение
мне нужно знать токен для текущего таска в любой момент времени, чтобы его отменить по нажатию кнопки. и мыслей, как организовать их хранение у меня нет
Организуйте список из CancellationTokenSource. При запуске таска - создавайте новый CancellationTokenSource, заносите его в список(или даже лучше стек). При нажатии на кнопку остановки - пробежитесь по всему списку токенов и отмените каждый из них. Затем очистите список.
0
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 57
09.10.2015, 10:21  [ТС]
А зачем все отменять-то? Мне же нужно только текущий отменить.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
10.10.2015, 22:51
создайте класс-обертку который будет содержать ссылку на такс, канс.токен (мб на еще какие параметры) - и храните это в списке/словаре.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2015, 22:51
Помогаю со студенческими работами здесь

Почему при выводе в поток char* выводится весь массив символов?
я немогу вот в чем разобраться есть : int main() { char v = &quot;Fdasda&quot;; char *p=v; cout &lt;&lt; &quot;\np=&quot; &lt;&lt; p; cout &lt;&lt;...

Стоит ли прорешивать весь сборник задач Абрамян
Стоит ли прорешивать весь этот сборник(там около 1000 задач)??? Хатя глупый вопрос.. А вообще кто-нибудь прорешивал его весь и вообще...

Программа во весь экран с учетом панели задач
Добрый день, столкнулся с такой проблемой при клике на кнопку форма разворачивается на весь экран WindowState = FormWindowState.Maximized...

Окно во весь экран поверх панели задач
При помощи функции: ShowWindow(hwnd,SW_SHOWMAXIMIZED); разворачиваю созданное в моём приложении окно во весь экран. Проблема в...

Развернуть форму на весь экран с учетом панели задач
При запуске команды в режиме maximised низ формы уходит за пень задач, мне нужно до панели задач, поэтому нужно определить размер формы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru