首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待新的快速并发特性加载资源。

等待新的快速并发特性加载资源。
EN

Stack Overflow用户
提问于 2022-08-05 09:42:36
回答 1查看 176关注 0票数 0

是否有可能等待新的快速并发特性加载资源。下面是一个示例:

代码语言:javascript
复制
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
        }
    }
}

如果没有异步等待,我将使用命令模式来存储操作,在资源加载时排队并执行它们,但也许有更好的方法。

EN

回答 1

Stack Overflow用户

发布于 2022-08-19 14:08:39

您可以使用延续挂起/等待可用的资源。通过使用withCheckedContinuation,您可以存储连续性,并在资源可用后恢复所有连续性。

当您多次使用连续性作为恢复它们时,要小心,或者根本不恢复它们会导致未定义的运行时行为和错误:

从不止一次的延续中恢复是未定义的行为。永远不要让任务无限期地处于暂停状态,并且泄漏任何相关的资源。如果违反这些不变量之一,CheckedContinuation将记录一条消息。

此外,您还可以使用withCheckedThrowingContinuation来支持异步等待和取消。对于示例实现,您可以查看我创建的提供类似功能的Future参与者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73247735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档