Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
21 / 6 / 8
Регистрация: 31.05.2015
Сообщений: 151

Не выставляется правильный статус Task при отмене через токен

25.08.2019, 08:44. Показов 1084. Ответов 3
Метки tpl (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Пытаюсь сделать отмену Task-а через токен.
В результате выполнение метода нормально прерывается, но статус задания остается Running, и, соответственно, IsCanceled, IsCompleted и IsFaulted имеют значение false.
Подскажите, плз, в чем ошибка.
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
static void Main(string[] args)
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            var t = Task.Run
            (
                () =>
                {
                    Method(cts.Token);
                    cts.Token.ThrowIfCancellationRequested();
                },
                cts.Token
            );
            while (Console.ReadKey().Key != ConsoleKey.Enter)
            {
 
            }
            cts.Cancel();
            
            Console.WriteLine("Главный поток");
            Console.WriteLine(t.Status);
            
            Console.WriteLine($"{t.IsCanceled}   {t.IsCompleted}   {t.IsFaulted}");
            Console.ReadKey();
        }
 
        static void Method(CancellationToken token)
        {
            int c = 0;
            while(!token.IsCancellationRequested)
            {
                Console.Clear();
                Console.WriteLine(c++);
                Console.WriteLine("Нажмите ENTER для отмены");
                Thread.Sleep(300);
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2019, 08:44
Ответы с готовыми решениями:

Ошибка в отмене задачи (Task)
Доброго времени суток) На данный момент изучаю многопоточность, а именно отмена выполнения задач (Task). Так вот, есть пример, по...

Ошибка при отмене сохранения файла через SaveFileDialog
Создаю файл Word и сохраняю его при помощи SaveFileDialog ' Create Word Application Dim oWord As Word.Application =...

Скрипт должен брать из БД токен, и устанавливать пользователю статус на страницу ВКонтакте
Уважаемые форумчани! Недавно стал осваивать php , вот мне понадобилось создать сервис АвтоСтатуса для ВКонтакте! Суть такова:...

3
HF
 Аватар для HF
1314 / 893 / 200
Регистрация: 09.09.2011
Сообщений: 2,659
Записей в блоге: 2
25.08.2019, 09:46
Вы делаете отмену непонятно где и как. Вот документация и пример:
Практическое руководство. Прослушивание запросов на отмену посредством опросов
0
21 / 6 / 8
Регистрация: 31.05.2015
Сообщений: 151
25.08.2019, 12:06  [ТС]
При запуске кода из документации IsCancelled все равно false.

Немного переделал код (отмена задания через 3 сек.). Результат тот же, причем во внешнем потоке не отлавливается исключение.
При этом, если убрать весь код между Task.Run и Cancel() (т.е. отменить сразу запуска после Task.Run), то IsCancelled становится True (исключение все равно не отлавливается)

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
    class Program
    {
        static void Main(string[] args)
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            Task t = null;
            try
            {
                t = Task.Run(() => Method(cts.Token), cts.Token);
            }
            catch(TaskCanceledException ex)
            {
                Console.WriteLine("Отменено");
            }
 
            Thread.Sleep(3000);
            cts.Cancel();
            
            Console.WriteLine("Главный поток");
            Console.WriteLine(t.Status);
            
            Console.WriteLine($"{t.IsCanceled}   {t.IsCompleted}   {t.IsFaulted}");
            Console.ReadKey();
        }
 
        static void Method(CancellationToken token)
        {
            int c = 0;
            while(!token.IsCancellationRequested)
            {
                Console.Clear();
                Console.WriteLine(c++);
                Console.WriteLine("Нажмите ENTER для отмены");
                Thread.Sleep(300);
            }
            token.ThrowIfCancellationRequested();
        }
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.08.2019, 14:06
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        static async Task Main(string[] args)
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            Task t = Task.Run(() => Method(cts.Token), cts.Token);
 
            await Task.Delay(3000);
            cts.Cancel();
 
            try
            {
                await t;
            }
            catch(TaskCanceledException ex)
            {
                Console.WriteLine("Отменено");
            }
            
            Console.WriteLine("Главный поток");
            Console.WriteLine(t.Status);
            
            Console.WriteLine($"{t.IsCanceled}   {t.IsCompleted}   {t.IsFaulted}");
            Console.ReadKey();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2019, 14:06
Помогаю со студенческими работами здесь

Как узнать статус Task-a из другого метода
хочу сделать что то типа такого , но условия видимости не позволяют private void button1_Click(object sender, EventArgs e) ...

Консольное приложение не создает файлы при запуске через Task Scheduler
Есть консольное приложение не C#. Работает с базои данных, собирает данные, записывает в фаилы. Поставила еxe(из bin\release) в Task...

Ошибка при отмене сохранения файла
private void button2_Click(object sender, EventArgs e) { var sfd = new SaveFileDialog(); sfd.Filter =...

Ошибка при отмене ввода в MaskEdit
Доброго времени суток! Задаю MaskEdit параметр EditMask Проверяю... все вводиться! Но если я сотру то что ввел и Жмякну в...

Файл закрывается при отмене сохранения
Здравствуйте. Пишу вот тут Текстовий редактор (курсач :) ) и такая ошибочка Когда Нажимаю закрыть документ выскакивает окно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru