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


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

В этом разделе описаны рекомендации по работе с пулом потоков.

Do's

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

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

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

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

  • Используйте ThreadPoolTimer.CreateTimer вместо функции спящего режима.

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

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

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

Не давайте

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

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

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

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

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