Использование задачи против использования потока для мониторинга задачи - PullRequest
1 голос
/ 20 марта 2020

Контекст: у нас есть задача, которая может занять от 30 секунд до 5 минут в зависимости от службы, которую мы потребляем в некоторых Azure функциях.

Мы планируем отслеживать текущее состояние этого объекта задачи чтобы убедиться, что он работает и не был отменен / неисправен.

Существует два способа go обойти это:

  • Создать задачу, запустить ее и затем отменить, когда основная задача выполнена. В качестве альтернативы, возможно, используйте Task.Delay вместе с некоторое время с условием.
  • Создайте поток, запустите его и подождите, пока он не завершится sh (с условием времени, чтобы избежать времени, которое выполняется вечно).

Мы провели некоторое исследование и поняли, что у обоих есть свои плюсы и минусы. Но мы все еще не уверены в том, какой из них будет наилучшим, и почему .

В аналогичном сценарии, что бы вы использовали? Задача, тема или что-то еще?

1 Ответ

0 голосов
/ 20 марта 2020

Использование потока немного расточительно, но немного более надежно.

  1. Это расточительно, потому что каждый поток выделяет 1 МБ памяти только для своего существования .

  2. Это более надежно, поскольку не зависит от наличия потоков ThreadPool для запуска события таймера. Внезапный всплеск спроса на потоки ThreadPool может оставить ThreadPool голодным на несколько секунд или даже минут (в крайнем случае ios).

Так что, если потеря приложения 1 МБ памяти не является проблемой для приложения, используйте поток. С другой стороны, если абсолютная точность времени событий не имеет значения, используйте задачу.

Вы также можете использовать задачу, запущенную с параметром LongRunning, но это по сути замаскированная нить.

...