gpt4 book ai didi

exception-handling - Async.Await未捕获任务异常

转载 作者:行者123 更新时间:2023-12-04 03:43:45 25 4
gpt4 key购买 nike

我有一个不返回任何东西的任务。您无法在此类Task上执行Async.AwaitTask,因此您需要执行Async.AwaitIAsyncTask。不幸的是,这似乎吞没了底层Task抛出的所有异常:-

TaskFactory().StartNew(Action(fun _ -> failwith "oops"))
|> Async.AwaitIAsyncResult
|> Async.Ignore
|> Async.RunSynchronously

// val it : unit = ()

另一方面,AwaitTask可以正确地级联异常:-
TaskFactory().StartNew(fun _ -> failwith "oops"                               
5)
|> Async.AwaitTask
|> Async.Ignore
|> Async.RunSynchronously

// POP!

将常规(非通用)任务视为异步但仍会传播异常的最佳方法是什么?

最佳答案

Xamarin F# Shirt App(我最初从Dave Thomas借来的)中:

[<AutoOpen>]
module Async =
let inline awaitPlainTask (task: Task) =
// rethrow exception from preceding task if it faulted
let continuation (t : Task) = if t.IsFaulted then raise t.Exception
task.ContinueWith continuation |> Async.AwaitTask

关于exception-handling - Async.Await未捕获任务异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com