Кода:Бросив исключение из Task.Run отображает «Не обрабатывался от кода пользователя» Сообщение
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");
}
}
}
}
Приведенных выше код при запуске из C# скрипки или с консоли на моих гравюрах ПК:
Start
Throwing
Caught
Однако, когда я запускаю его из Visual Studio (F5 в режиме отладки), я получаю следующее сообщение:
Я не понимаю, почему я получил сообщение «не обрабатывался в пользовательском коде» из Visual Studio, хотя запуск его с консоли или скрипта C# прекрасен. Мне что-то не хватает?
UPDATE
Я попытался ожидание задачи f.FooAsync().Wait();
в Main, но исключение по-прежнему сообщается как необработанное (то же самое сообщение об ошибке).
Код в порядке, это неправильные настройки вашего отладчика. Нажмите ссылку «Открыть настройки исключения», снимите флажок «Бросить». Если вы включили его намеренно, просто нажмите «Продолжить». –
@ HansPassant: Спасибо. Здесь я нашел [подробнее об этой проблеме] (http://stackoverflow.com/a/16925282/906773). –