是否有可能等待新的快速并发特性加载资源。下面是一个示例:
enum ResourceState {
case initial
case loading
case loaded
}
actor Resource {
var state = ResourceState.initial
func load() {
// Load resource on background thread
// ...
}
func doWithResource() {
if state == .initial {
load()
}
if state == .loaded {
// Do !
}
if state == .loading {
// How to wait for resource to be loaded???
// Resource loading can be initiated from elsewhere
}
}
// Same as , but with
func doWithResource() {
if state == .initial {
load()
}
if state == .loaded {
// Do !
}
if state == .loading {
// How to wait for resource to be loaded???
// Resource loading can be initiated from elsewhere
}
}
}如果没有异步等待,我将使用命令模式来存储操作,在资源加载时排队并执行它们,但也许有更好的方法。
发布于 2022-08-19 14:08:39
您可以使用延续挂起/等待可用的资源。通过使用withCheckedContinuation,您可以存储连续性,并在资源可用后恢复所有连续性。
当您多次使用连续性作为恢复它们时,要小心,或者根本不恢复它们会导致未定义的运行时行为和错误:
从不止一次的延续中恢复是未定义的行为。永远不要让任务无限期地处于暂停状态,并且泄漏任何相关的资源。如果违反这些不变量之一,CheckedContinuation将记录一条消息。
此外,您还可以使用withCheckedThrowingContinuation来支持异步等待和取消。对于示例实现,您可以查看我创建的提供类似功能的Future参与者。
https://stackoverflow.com/questions/73247735
复制相似问题