У меня есть длительная задача, которую я реализовал с помощью параллельной библиотеки задач. Когда задача запускается, я захватываю снимки нескольких входных значений и коллекций, а затем выполняю различные операции с использованием этой информации. Если какое-либо из этих значений или коллекций изменяется во время выполнения задачи, я бы хотел, чтобы Task Task снова выполнялся сразу после завершения. Должен ли я создавать новую задачу или есть способ повторно использовать существующую задачу? Какой лучший способ запустить вторую итерацию?
Как перезапустить/повторно использовать повторяющуюся задачу?
Ответ 1
Создайте новую задачу.
Как указывает http://msdn.microsoft.com/en-us/library/dd270682.aspx, попытка перезапуска запущенной или завершенной задачи не поддерживается. Редко бывает хорошей идеей делать что-то, что обычно генерирует исключение, и повторное использование задачи - одна из тех вещей.
Ответ 2
Вы не можете снова запустить существующий Task
. Таким образом, у вас есть два варианта:
- Запустите новый
Task
. Вероятно, это чище. - Запустите цикл в
Task
, который проверяет, изменилось ли что-то с последнего раза, и если это произойдет, начинается новая итерация.
Ответ 3
Вы также можете использовать логику рефакторинга для использования указателей функций (или делегатов в VB.NET).