Запуск нескольких долгосрочных задач в качестве транзакции в TPL C # - PullRequest
1 голос
/ 12 сентября 2011

У меня есть список из n задач, которые я хочу выполнять параллельно, асинхронно.

Каждая из параллельно выполняемых задач может иметь 1 или более вложенных задач.

Мне также нужнодождитесь и проанализируйте возвращаемый результат каждой задачи.Вся операция является успешной, только если все задачи выполняются успешно (например, они возвращают «true»).

По сути, это транзакционная операция, в которой мне нужно дождаться успешного завершения многих задач.

Проблема заключается в том, что каждая задача может занять 1-3 часа.выполнено (некоторые задачи могут занять всего несколько минут, а другие - часы) Вся операция может занять полный рабочий день.

Мои вопросы:

  1. Является ли этот подход осуществимым и выполнимым с помощью Task Parallel Library?
  2. Кроме того, что произойдет, если одна из задач вышла из строя и не сможет отчитаться перед исходной задачей?
  3. Может ли библиотека обрабатывать такие сценарии, когда задачи не только вложены, но и занимают очень много времени?

РЕДАКТИРОВАТЬ: Iнашел этот блог об отмене задач, особенно долго выполняемых.Может быть, это будет полезно и другим.

1 Ответ

2 голосов
/ 12 сентября 2011

Вы ищете Task.WaitAll?

Если задание действительно истекло - то есть ошибки - тогда будет выброшено AggregateException. Обратите внимание, что WaitAll будет ждать, пока все задач так или иначе завершат свои задачи, прежде чем вернуться, даже если некоторые задачи рано не пройдут.

У меня нет оснований полагать, что у TPL есть какие-либо проблемы с задачами, которые занимают очень много времени.

...