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.

Rzeczy, które należy robić

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

  • Używaj elementów pracy do realizowania długotrwałych zadań 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.

  • Wysyłanie aktualizacji do wątku interfejsu użytkownika. W aplikacjach WinUI 3 używaj DispatcherQueue.TryEnqueue z Microsoft.UI.Dispatching.DispatcherQueue.

  • Użyj funkcji 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, ma zaawansowane możliwości i jest zoptymalizowana pod kątem dynamicznego skalowania w zależności od zasobów urządzenia i aktywności w obrębie procesu oraz w całym systemie.

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

  • 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ą < 1 milisekund (w tym 0). Spowoduje to, że element roboczy będzie działać jak timer jednorazowy.

  • Nie przesyłaj cyklicznych elementów roboczych, których ukończenie trwa dłużej niż czas podany w parametrze period.

  • Nie próbuj wysyłać aktualizacji interfejsu użytkownika (innych niż komunikaty toast i powiadomienia) z elementu roboczego uruchomionego przez zadanie w tle. Zamiast tego użyj procedur obsługi postępu zadań w tle i uzupełniania — na przykład IBackgroundTaskInstance.Progress.

  • W przypadku używania procedur obsługi elementów roboczych korzystających ze słowa kluczowego asynchronicznego nie zakładaj, że cały kod w procedurze obsługi został wykonany po ustawieniu stanu ukończenia elementu roboczego. 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 może zostać wykonany po ustawieniu elementu roboczego na stan ukończenia.

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