Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.TryEnqueuezMicrosoft.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