Udostępnij za pośrednictwem


Najlepsze rozwiązania dotyczące korzystania z puli wątków

W tym temacie opisano najlepsze rozwiązania dotyczące pracy z pulą wątków.

Czy

  • Użyj puli wątków, aby wykonać równoległą pracę w aplikacji.

  • Elementy robocze umożliwiają wykonywanie zadań rozszerzonych bez blokowania wątku interfejsu użytkownika.

  • Utwórz elementy robocze, które są krótkotrwałe i niezależne. Elementy robocze są uruchamiane asynchronicznie i mogą być przesyłane do puli w dowolnej kolejności z kolejki zadań.

  • Wyślij aktualizacje do wątku interfejsu użytkownika za pomocą Windows.UI.Core.CoreDispatcher.

  • Użyj ThreadPoolTimer.CreateTimer zamiast funkcji Sleep.

  • Użyj puli wątków zamiast tworzyć własny system zarządzania wątkami. Pula wątków działa na poziomie systemu operacyjnego z zaawansowanymi możliwościami i jest zoptymalizowana pod kątem dynamicznego skalowania zgodnie z zasobami sprzętowymi oraz aktywnością wewnątrz procesu i w całym systemie.

  • W języku C++ upewnij się, że delegaty elementów roboczych używają modelu agilnego wątków (delegaty języka C++ są domyślnie agilne).

  • Używaj wstępnie przydzielonych elementów roboczych, gdy nie można tolerować błędu alokacji zasobów w momencie użycia.

Czego nie robić

  • Nie twórz okresowych czasomierzy z wartością okresu równą <1 milisekunda (w tym 0 milisekund). Spowoduje to, że element roboczy będzie działał jako czasomierz jednorazowy.

  • Nie przesyłaj okresowych elementów roboczych, które trwają dłużej niż czas określony w parametrze okresu.

  • Nie próbuj wysyłać aktualizacji interfejsu użytkownika (innych niż wyskakujące i powiadomienia) z elementu roboczego wysyłanego z zadania w tle. Zamiast tego należy użyć procedur obsługi postępu i zakończenia zadań w tle — na przykład IBackgroundTaskInstance.Progress.

  • W przypadku używania procedur obsługi elementów roboczych korzystających ze słowa kluczowego async, nie zakładaj, że cały kod w procedurze został wykonany, gdy na elemencie roboczym ustawiono stan ukończenia. Element roboczy puli wątków może być ustawiony na pełny stan przed wykonaniem całego kodu w procedurze obsługi. Kod po słowie kluczowym await w programie obsługi zdarzeń może zostać wykonany, gdy element roboczy zostanie ustawiony na stan ukończony.

  • Nie próbuj uruchamiać wstępnie przydzielonego elementu roboczego więcej niż raz bez ponownego inicjowania go. Tworzenie okresowego elementu roboczego