gpt4 book ai didi

swift - 在根任务中抛出错误

转载 作者:行者123 更新时间:2023-12-05 05:51:50 25 4
gpt4 key购买 nike

我在文档中找不到任何定义以下行为的内容

// task-less context
Task.detached {
try await myThrowingFunction()
runWhenSuccessful()
}

该方法在抛出线上返回并丢弃错误,并且永远不会调用 runWhenSuccessful()。虽然它在某种程度上是有道理的,但我至少希望它会触发断言失败或针对未处理的错误。

处理这个问题的正确方法是什么,因为我无法处理任何父任务中的错误。

我是否希望每次都将闭包中的所有内容包装在 do/catch 中?

最佳答案

在我看来,根据设计,任务希望您使用 do/catch 处理 block 内的错误,如果您不这样做,错误将被丢弃。

任务确实有一个 result任务完成时您可以读取的属性,但它会阻塞当前线程,因此它可能不是您想要的。

如果您经常使用此模式,则可以为采用失败闭包的 Task 创建一个便捷的初始化程序。

这是自定义初始化器的样子,以及它的使用方式:

extension Task where Failure == Never, Success == Void {
init(priority: TaskPriority? = nil, operation: @escaping () async throws -> Void, `catch`: @escaping (Error) -> Void) {
self.init(priority: priority) {
do {
_ = try await operation()
} catch {
`catch`(error)
}
}
}
}

Task {
try await asyncTask()
} catch: { error in
handle(error)
}

关于swift - 在根任务中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70314263/

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