Как правильно завершить работу Task? - C#

Узнай цену своей работы

Формулировка задачи:

Создал такой класс: В методе StartWork() находится такой код:
        public async void StartWork()
        {
            allTasksCompleted = false;
            await Task.Run(() =>
            {
                // Какой-то код...
                while (IsWork)
                {
                    // Какой-то код...
                    // Какой-то код...
                    // Какой-то код...
 
                    Task.Delay(5000).Wait();
                }
            });
            allTasksCompleted = true;
        }
Я останавливаю итерацию в этом потоке с задержкой путем присваивания свойству IsWork false. Поле allTasksCompleted ввел для проверки точно ли завершился поток или нет. PageObjectBot управляется WPF приложением, а внутри цикла находится код сторонних разработчиков выполняемый асинхронно. Если мой пользователь закроет UI то текущая итерация будит выполняться до конца. Поверхностное гугление дало мне понять что такой способ остановки потока в принципе адекватный но что если я хочу при закрытии UI быть уверенным что итерация тоже прервется в тот же момент? Мне нужно проверять на IsWork перед каждой инструкцией или нужно разбить код итерации на более мелкие куски. Вообщем помогите с рефакторингом.

Решение задачи: «Как правильно завершить работу Task?»

textual
Листинг программы
                    if (token.IsCancellationRequested)
                        return;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы