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