Uruchamiamy aplikację konsoli C#, która uruchamia wiele wątków w celu wykonania pracy. Główną funkcją wygląda mniej więcej tak:Aplikacja C# niespodziewanie się kończy
try
{
DoWork();
}
catch (Exception err)
{
Logging.Log("Exception " + err.ToString());
}
Logging.Log("Finished");
Funkcja DoWork()
czyta nowych miejsc pracy z bazy danych, a ikra wątki przetwarzać jeden element pracy każdego. Od zeszłego tygodnia aplikacja zaczęła znikać w tajemniczy sposób. Znika z listy procesów i nie ma wpisu w dziennikach zdarzeń. Plik dziennika pokazuje pracę do pewnego momentu: nie rejestruje wyjątku ani linii "Zakończono".
Wszelkie wskazówki na temat tego, jak aplikacja C# może zniknąć w ten sposób?
EDIT: Nici są tworzone jak:
new Thread(SomeObj.StartFunc).Start();
Niektóre zaginięć wystąpić gdy nie ma wątków są uruchomione.
P.S. Zainstalowaliśmy DebugDiag z regułą, aby utworzyć zrzut awaryjny za każdym razem, gdy nasz program się zawiesił. Nie tworzyło żadnych plików zrzutu, gdy proces zniknął.
Moglibyśmy naprawdę zrobić z bardziej szczegółowymi informacjami na temat tego, co jest w metodzie DoWork ... –
Co robi DoWork po utworzeniu i uruchomieniu wątków? Czy wchodzi w nieskończoną pętlę, natychmiast wychodzi, próbuje dołączyć do wątków tła, czy co? –
Przechodzi w nieskończoną pętlę. Wątki w tle aktualizują swój status w tablicy, która jest chroniona za pomocą instrukcji lock {}. Po zakończeniu wątku usuwa swój własny wpis z tablicy. – Andomar