In Steven Toub's article:Unbeobachtete Task-Ausnahmen in .NET 4.5 noch Absturz App
Um es einfacher für Entwickler asynchronen Code auf Aufgaben basierend zu schreiben, .NET 4.5 ändert das Standardausnahmeverhalten für unbeobachtete Ausnahmen. Während unbeobachtete Exceptions immer noch das UnobservedTaskException-Ereignis auslösen (dies wäre jedoch eine breaking change), stürzt der Prozess standardmäßig nicht ab. Stattdessen wird die Ausnahme gegessen werden, nachdem das Ereignis ausgelöst wird, unabhängig davon, ob ein Ereignishandler die Ausnahme beobachtet.
Aber das Ergebnis meines Experiments stimmt nicht mit der obigen Aussage überein. Unten ist mein Code:
static void Main(string[] args)
{
DownloadAsync("http://an.invalid.url.com);
}
async static void DownloadAsync(string url)
{
using (var client = new System.Net.Http.HttpClient())
{
string text = await client.GetStringAsync(url);
Console.WriteLine("Downloaded {0} chars", text.Length);
}
}
Da ich eine ungültige URL DownloadAsync()
-Methode übergeben, wird der Anruf an HttpClient
‚s GetStringAsync()
Methode eine expcetion werfen, und stürzt die Anwendung.
Meine Frage ist also: Stört nicht unbeobachtete Ausnahmen in .NET 4.5 immer noch App standardmäßig?
Es ist nicht unbeobachtet, ist eine implizite Warte die text.length erreichbar. – Jesse
@Jesse Ist es nicht die Zuweisung des Ergebnisses zu 'text', die bewirkt, dass das Ergebnis beobachtet wird, anstatt die spätere Verwendung von' text.Length'? –
@MatthewWatson Sie sind völlig richtig, in meinen Gedanken war es eine Aufgabe, aber natürlich ist es nicht. – Jesse