Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Task.IsComplited до реального завершения задачи

Создаю кучу Task - в каждом игровой цикл, помещаю их в List
GamesList.Add(gp.ContinueWith(t=>GamesList.Remove(t)));
Но они почему-то удаляются из списка до того как игровой цикл завершится - игра при этом идет спокойненько. Wtf?


Ответ

Проблема в том, что вы добавляете в список не тот таск, который вы удаляете.
ContinueWith возвращает новый таск, а пытаетесь удалять вы первоначальный таск.
И да, вы не должны работать со списком из разных потоков без блокировки. Ну то есть вы можете, но не удивляйтесь тогда потерянным данным.

Попробуйте заменить GamesList на потокобезопасную коллекцию, и используйте
GamesList.Add(gp); gp.ContinueWith(t=>GamesList.Remove(t));

Комментариев нет:

Отправить комментарий