Поделиться через


Рекомендации по использованию пула потоков

Этот раздел содержит рекомендации по работе с пулом потоков.

Следует:

  • Использовать пул потоков для выполнения параллельных операций в приложении.

  • Использовать рабочие элементы для выполнения расширенных задач без блокировки потока пользовательского интерфейса.

  • Создавать кратковременные и независимые рабочие элементы. Рабочие элементы выполняются асинхронно и могут отправляться в пул из очереди в любом порядке.

  • Обновления обработки в поток пользовательского интерфейса с помощью Windows.UI.Core.CoreDispatcher.

  • Используйте ThreadPoolTimer.CreateTimer вместо функции Sleep.

  • Использовать пул потоков вместо того, чтобы создавать собственную систему управления потоками. Пул потоков работает на уровне ОС с расширенными функциями и оптимизирован для динамического масштабирования согласно ресурсам устройства и событиям в рамках процесса и в системе.

  • В случае языка C++ убедитесь, что делегаты рабочих элементов используют гибкую потоковую модель (делегаты C++ являются гибкими по умолчанию).

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

Не следует:

  • Создавать периодические таймеры, используя значение period<1 мс (включая 0). Иначе рабочий элемент будет действовать как однократный таймер.

  • Отправлять периодические рабочие элементы, выполнение которых занимает больше времени, чем указано в параметре period.

  • Отправлять обновления пользовательского интерфейса (кроме всплывающих и обычных уведомлений) из рабочего элемента, отправленного из фоновой задаче. Вместо этого нужно использовать обработчики хода выполнения и завершения фоновой задачи — например, IBackgroundTaskInstance.Progress.

  • При использовании обработчиков рабочих элементов, использующих ключевое слово async, помните о том, что рабочий элемент пула потоков может быть настроен на состояние выполнения до выполнения всего кода в обработчике. Код после ключевого слова await в обработчике может выполняться после настройки рабочего элемента на состояние завершения.

  • Выполнять предварительно выделенный рабочий элемент более одного раза без повторной инициализации. Создание периодического рабочего элемента