Thread UnhandledException soll Prozess mit in den Tod reissen

von

in

Das Standardverhalten wenn ein Thread stirbt hat sich mit v4.5 geändert sodass ein thread mit einer unbehandelten Exception stirbt und das Programm einfach weiter läuft. Dies macht aber nicht immer Sinn z.B. in einem Service das 2 Aufgaben hat und diese in Endlosschleife asynchron in 2 Threads abgearbeitet werden. Wenn hier 2 Threads abgearbeitet werden und einer hat eine Exception ist es oft besser den ganzen Prozess sterben zu lassen um ihn automatisch erneut starten zu lassen.

Was nicht funktioniert ist im myTask.ContinueWith(() => throw new Exception(„doesn’t kill programm!“)). Was funktioniert ist task.Wait() jedoch nur für 1en Task weil dann wieder am MainThread gewartet wird.

Dies kann mit folgendem Code erzielt werden:

public static class TaskExt
{
    public static async void Observe(
        this Task @this,
        bool continueOnCapturedContext = true)
    {
        await @this.ConfigureAwait(continueOnCapturedContext);
    } 
}

Credits on Stackoverflow

Es kann auch das Standardverhalten geändert werden. Dies geht so: Link


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert