Używanie wątków i wątkowości
Za pomocą platformy .NET można pisać aplikacje, które wykonują wiele operacji w tym samym czasie. Operacje z potencjałem przechowywania innych operacji mogą być wykonywane na osobnych wątkach, proces znany jako wielowątkowość lub wolne wątkowość.
Aplikacje korzystające z wielowątku są bardziej reagujące na dane wejściowe użytkownika, ponieważ interfejs użytkownika pozostaje aktywny jako zadania intensywnie korzystające z procesora wykonywane w oddzielnych wątkach. Wielowątkowość jest również przydatna podczas tworzenia skalowalnych aplikacji, ponieważ w miarę zwiększania obciążenia można dodawać wątki.
Uwaga
Jeśli potrzebujesz większej kontroli nad zachowaniem wątków aplikacji, możesz samodzielnie zarządzać wątkami. Jednak programowanie wielowątkowa jest znacznie uproszczone przy użyciu System.Threading.Tasks.Parallel klas i System.Threading.Tasks.Task , Parallel LINQ (PLINQ), współbieżnych klas kolekcji w System.Collections.Concurrent przestrzeni nazw i modelu programowania opartego na koncepcji zadań, a nie wątków. Aby uzyskać więcej informacji, zobacz Parallel Programming and Task Parallel Library (TPL).
Instrukcje: tworzenie i uruchamianie nowego wątku
Utworzysz nowy wątek, tworząc nowe wystąpienie System.Threading.Thread klasy. Należy podać nazwę metody, którą chcesz wykonać w nowym wątku konstruktora. Aby uruchomić utworzony wątek, wywołaj metodę Thread.Start . Aby uzyskać więcej informacji i przykładów, zobacz artykuł Tworzenie wątków i przekazywanie danych w czasie rozpoczęcia oraz dokumentacja interfejsu Thread API.
Instrukcje: zatrzymywanie wątku
Aby zakończyć wykonywanie wątku, użyj .System.Threading.CancellationToken Zapewnia ujednolicony sposób zatrzymywania wątków kooperacyjnie. Aby uzyskać więcej informacji, zobacz Anulowanie w zarządzanych wątkach.
Czasami nie można zatrzymać wątku współpracy, ponieważ uruchamia kod innej firmy, który nie jest przeznaczony do anulowania współpracy. W takim przypadku możesz chcieć zakończyć jego wykonywanie wymuszone. Aby zakończyć wykonywanie wątku przymusowo, w programie .NET Framework można użyć Thread.Abort metody . Ta metoda wywołuje ThreadAbortException element w wątku, w którym jest wywoływany. Aby uzyskać więcej informacji, zobacz Niszczenie wątków. Metoda nie jest obsługiwana Thread.Abort na platformie .NET Core. Jeśli musisz zakończyć wykonywanie kodu innej firmy przymusowo na platformie .NET Core, uruchom go w osobnym procesie i użyj Process.Kill metody .
Element System.Threading.CancellationToken nie jest dostępny przed programem .NET Framework 4. Aby zatrzymać wątek w starszych wersjach programu .NET Framework, użyj technik synchronizacji wątków, aby ręcznie zaimplementować anulowanie współpracy. Możesz na przykład utworzyć pole shouldStop
warunkowe volatile i użyć go, aby zażądać kodu wykonanego przez wątek, aby zatrzymać. Aby uzyskać więcej informacji, zobacz volatile in C# Reference and System.Threading.Volatile.
Thread.Join Użyj metody , aby wywołanie wątku czekało na zakończenie zatrzymanego wątku.
Instrukcje: wstrzymywanie lub przerywanie wątku
Metoda służy do wstrzymania Thread.Sleep bieżącego wątku przez określony czas. Zablokowany wątek można przerwać, wywołując metodę Thread.Interrupt . Aby uzyskać więcej informacji, zobacz Wstrzymywanie i przerywanie wątków.
Właściwości wątku
W poniższej tabeli przedstawiono niektóre Thread właściwości:
Właściwości | opis |
---|---|
IsAlive | Zwraca wartość true , jeśli wątek został uruchomiony i nie został jeszcze przerwany normalnie lub przerwany. |
IsBackground | Pobiera lub ustawia wartość logiczną wskazującą, czy wątek jest wątkiem w tle. Wątki tła są podobne do wątków pierwszego planu. Jednak wątek w tle nie uniemożliwia zatrzymania procesu. Po zatrzymaniu wszystkich wątków pierwszego planu należących do procesu środowisko uruchomieniowe języka wspólnego kończy proces przez wywołanie Abort metody w wątkach w tle, które są nadal aktywne. Aby uzyskać więcej informacji, zobacz Foreground and Background Threads (Wątki pierwszego planu i tła). |
Name | Pobiera lub ustawia nazwę wątku. Najczęściej używane do odnajdywania poszczególnych wątków podczas debugowania. |
Priority | Pobiera lub ustawia ThreadPriority wartość używaną przez system operacyjny do określania priorytetów planowania wątków. Aby uzyskać więcej informacji, zobacz Planowanie wątków i ThreadPriority dokumentacji. |
ThreadState | Pobiera wartość zawierającą ThreadState bieżące stany wątku. |