Kod:rzucanie wyjątku od Task.Run wyświetla „Nie obsługiwane z kodu użytkownika” Message
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Console.WriteLine("Start");
Foo f = new Foo();
f.FooAsync();
}
public class Foo
{
public async void FooAsync()
{
try
{
await Task.Run(() =>
{
Console.WriteLine("Throwing");
throw new Exception();
});
}
catch (Exception)
{
Console.WriteLine("Caught");
}
}
}
}
Powyższy kod podczas uruchamiania z C# skrzypce lub z konsoli na moich wydruków komputerowych:
Start
Throwing
Caught
Jednakże gdy uruchomię go z Visual Studio (F5 w trybie debugowania), pojawia się następujący komunikat:
Nie rozumiem, dlaczego otrzymuję komunikat "nie było obsługiwane w kodzie użytkownika" od Visual Studio, chociaż uruchomienie go z konsoli lub skrzypce C# jest w porządku. Czy brakuje mi czegoś oczywistego?
UPDATE
Próbowałem czeka na zadaniu f.FooAsync().Wait();
w Main, ale wyjątek jest nadal zgłaszane jako nieobsługiwany (ten sam komunikat o błędzie).
Kod jest w porządku, ustawienia debuggera są nieprawidłowe. Kliknij link "Otwórz ustawienia wyjątków", odznacz pole wyboru Opuszczone. Jeśli celowo go włączyłeś, kliknij Kontynuuj. –
@HansPassant: Dzięki. Znalazłem także [więcej informacji na temat problemu] (http://stackoverflow.com/a/16925282/906773). –