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

174
23 августа 2017, 14:46

Создаю кучу Task - в каждом игровой цикл, помещаю их в List<Task>:

GamesList.Add(gp.ContinueWith(t=>GamesList.Remove(t)));

Но они почему-то удаляются из списка до того как игровой цикл завершится - игра при этом идет спокойненько. Wtf?

Answer 1

Проблема в том, что вы добавляете в список не тот таск, который вы удаляете.

ContinueWith возвращает новый таск, а пытаетесь удалять вы первоначальный таск.

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

Попробуйте заменить GamesList на потокобезопасную коллекцию, и используйте

GamesList.Add(gp);
gp.ContinueWith(t=>GamesList.Remove(t));
READ ALSO
Не удается запустить службу

Не удается запустить службу

Всем приветНаписал службу, в которой код рабочий

295
Скачка всех файлов по ссылке

Скачка всех файлов по ссылке

Подскажите,пожалуйста, как скачать все файлы по нужному мне пути сайтаНапример www

189
Обновление данных в форме

Обновление данных в форме

Есть две формы и статический класс для их передачи данных между ними, На форме1 есть кнопка при нажатии на которую открывается форма2 посредством...

194
Не авторизируется с Google Play Servise

Не авторизируется с Google Play Servise

Не авторизируется с Google play, использую плагин для Unity версии 940

240