Size: a a a

2021 March 20

Dv

Dr. Friedrich von Ne... in F# Chat
Pavel
В таске не валит, в асинке валит. Где более правильно?
*в таске — зависит от настроек рантайма
источник

P

Pavel in F# Chat
Dr. Friedrich von Never
*в таске — зависит от настроек рантайма
хм.. а есть пруф на них? в мсдн-е говорится - "Unhandled exceptions in thread pool threads terminate the process"
источник

P

Pavel in F# Chat
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Pavel
хм.. а есть пруф на них? в мсдн-е говорится - "Unhandled exceptions in thread pool threads terminate the process"
Ну, это unhandled :)
источник

P

Pavel in F# Chat
ну а тут а какие?)
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Обычно финализатор таски их валил.
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Pavel
ну а тут а какие?)
Пул их хендлит обычно так-то
источник

Dv

Dr. Friedrich von Ne... in F# Chat
https://stackoverflow.com/a/21648387/2684760 вот подробности
источник

Dv

Dr. Friedrich von Ne... in F# Chat
У легаси рантайма есть флажок, который переключает это поведение. У современного — вроде бы, нет.
источник

P

Pavel in F# Chat
ранее (лет 5 назад) аналогичная ситуация была и в тасках (после ряда падений прода, приходилось тщательно обкладывать catch-ами код в тасках). но потом что-то изменили (мы не меняли) и необработанные ошибки в тасках перестали валить процесс, я даже где-то видел инфу об этом, но сейчас не вспомню
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Pavel
ранее (лет 5 назад) аналогичная ситуация была и в тасках (после ряда падений прода, приходилось тщательно обкладывать catch-ами код в тасках). но потом что-то изменили (мы не меняли) и необработанные ошибки в тасках перестали валить процесс, я даже где-то видел инфу об этом, но сейчас не вспомню
Да, всё верно.
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Поэтому в общем случае это поведение для тасок зависит от версии и настроек рантайма.
источник

Dv

Dr. Friedrich von Ne... in F# Chat
Если тебе нужно тасочное поведение, то и используй Async.StartAsTask.
источник

Dv

Dr. Friedrich von Ne... in F# Chat
А вот Async.Start, действительно, любит повалить процесс, если там исключения не обработаны. Вот это поворот.
источник

g

gsomix in F# Chat
Pavel
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
Да, я был не прав.
источник

g

gsomix in F# Chat
Это интересно. Мы знаем, что Async.Start не возвращает исключения вызывающему коду.
источник

g

gsomix in F# Chat
И оно остается unhandled на тредпуле.
источник

g

gsomix in F# Chat
источник

P

Pavel in F# Chat
Ну видимо он такой (Async.Start) . Значит надо делать свой Start , который прицепит Async.Catch и будет логировать ексепшн
источник

g

gsomix in F# Chat
Pavel
Ну видимо он такой (Async.Start) . Значит надо делать свой Start , который прицепит Async.Catch и будет логировать ексепшн
Я для себя выработал рекомендацию – дважды подумай перед использованием Async.Start. :)
источник