gpt4 book ai didi

快速调用没有返回值的异步函数

转载 作者:行者123 更新时间:2023-12-05 08:36:07 27 4
gpt4 key购买 nike

无论如何,swift 的新结构化并发模型是否可以在没有虚拟 bool 返回的情况下执行以下操作?

func do() async -> Bool {
something()
return true
}
async let foo = do()

//do other stuff
stuff()

//now I need to know that "do" has finished
await foo

我知道我可以执行以下操作,但它不会同时运行:

func do() async {
something()
}
await do()
stuff()

//cannot run "stuff" and "do" concurrently

我觉得我在这里错过了一个基本的想法,因为最上面的代码块做了我需要的,但由于 Bool 返回感觉像是一个 hack。

最佳答案

您所描述的是一项任务。例如:

Task { await `do`() }
stuff()

这将与 stuff() 同时运行 do()。如果您需要跟踪 do() 何时完成,您可以等待任务的值:

let task = Task { await `do`() }
stuff()
await task.value // Doesn't actually return anything, but will block

这种Task运行在当前Actor的上下文中,这通常是你想要的。如果你想要一些独立于当前 Actor 的东西,你可以使用 Task.detached() 代替。

如果您以前使用过 DispatchQueues,在许多您会编写 queue.async { ... } 的地方,您现在可以编写 Task { ... }。新系统功能更强大,但如果您愿意,它可以很好地映射到旧系统。

关于快速调用没有返回值的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70563273/

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