Могу ошибаться, но вроде в аналогичной ситуации в таске процесс не крэшится. Возможно в системный лог инфа об исключении пусть запишется
Если в таске возникает необработанное исключение, процесс не крэшится. Почему такая разница?
Если ты таску ожидаешь или выполняешь с основного потока - крашится
Значит ещё страннее, так как есть случаи когда не крашится
В Async.Start не крашится.
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Task.Factory.StartNew(() => { Thread.Sleep(10000); Console.WriteLine("crash now!"); throw new Exception("shit happens"); }); Console.WriteLine("wait exception.."); var k = Console.ReadKey(); Console.WriteLine("still working.."); k = Console.ReadKey(); Console.WriteLine("exit now"); } } }
Потому что оно сразу на тредпул уезжает
И что ты тут ожидаешь?)
Угу. Поэтому с Async.Start очень внимательно нужно обращаться.
Вот как раз в таком кейсе у меня по крешило
Показывай код.
let throwAsync = async { do! Async.Sleep(2000) printfn "going to fail.." failwith "" } [<EntryPoint>] let main argv = try Async.Start throwAsync printfn "async started.." with _ -> printfn "Failed" printfn "wait any key.." System.Console.Read() |> ignore 0
В этом коде поведение зависит от настроек рантайма.
Да, я был не прав.
Обсуждают сегодня