Wydaje się, że nie ma wielu wyjaśnień na ten temat, ale kody wyjścia mają być używane do wskazania, jak wątek wyszedł, 0
zwykle oznacza, że wyszedł bezpiecznie, podczas gdy cokolwiek innego zwykle oznacza, że tak się nie stało nie wyjdź zgodnie z oczekiwaniami. Ale wtedy ten kod wyjścia można ustawić samodzielnie w kodzie, aby całkowicie to przeoczyć.
Najbliższy link, który mogłem znaleźć przydatny, aby uzyskać więcej informacji, to to
Cytat z powyższego linku:
Niezależnie od metody zakończenia, liczba całkowita, którą zwracasz z procesu lub wątku, musi mieć wartości z zakresu 0-255 (8 bitów). Wartość zerowa oznacza sukces, a wartość niezerowa oznacza niepowodzenie. Chociaż można spróbować zwrócić dowolną wartość całkowitą jako kod zakończenia, tylko najniższy bajt liczby całkowitej jest zwracany z procesu lub wątku jako część kodu zakończenia. Bajty wyższego rzędu są używane przez system operacyjny do przekazywania specjalnych informacji o procesie. Kod zakończenia jest bardzo przydatny w programach wsadowych / powłokowych, które warunkowo wykonują inne programy w zależności od sukcesu lub niepowodzenia jednego z nich.
Z dokumentacji dla GetEXitCodeThread
Ważne Funkcja GetExitCodeThread zwraca prawidłowy kod błędu zdefiniowany przez aplikację dopiero po zakończeniu wątku. Dlatego aplikacja nie powinna używać STILL_ACTIVE (259) jako kodu błędu. Jeśli wątek zwróci STILL_ACTIVE (259) jako kod błędu, aplikacje, które testują tę wartość, mogą zinterpretować ją jako oznaczającą, że wątek nadal działa i kontynuują testowanie zakończenia wątku po zakończeniu wątku, co może spowodować umieszczenie aplikacji w nieskończoną pętlę.
Rozumiem to wszystko, że kod zakończenia nie ma większego znaczenia, jeśli używasz wątków we własnej aplikacji dla własnej aplikacji. Wyjątkiem jest prawdopodobnie sytuacja, w której uruchamiasz kilka wątków w tym samym czasie, które są od siebie zależne. Jeśli istnieje wymóg, aby zewnętrzne źródło odczytywało ten kod błędu, możesz ustawić go tak, aby informował inne aplikacje o stanie Twojego wątku.
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
Chodzi o to, że zadania są wykonywane przez wątki puli wątków i na podstawie heurystyki puli wątków może nie zakończyć wątku nawet po zakończeniu zadania. Wątek po prostu wraca do puli wątków oczekujących na przydzielenie do następnego zadania. Dlatego kod zakończenia STILL_ACTIVE (259) brzmi tutaj tak intuicyjnie.Jak wspomniał Sayse, kod zakończenia
259 (0x103)
ma specjalne znaczenie, w tym przypadku debugowany proces nadal działa.Widziałem to często w przypadku debugowania usług internetowych, ponieważ wątek nadal działa po wykonaniu każdego wywołania usługi sieciowej (ponieważ nadal nasłuchuje kolejnych wywołań).
źródło
przydarzyło mi się to, że w moim rozwiązaniu jest wiele projektów. Chciałem debugować projekt 1, jednak projekt 2 został ustawiony jako domyślny projekt początkowy. Naprawiłem to przez kliknięcie prawym przyciskiem myszy na projekcie i wybranie „Ustaw jako projekt startowy”, a następnie uruchomienie debugowania jest w porządku.
źródło