Swift 异步/等待,多个监听器

问题描述 投票:0回答:1

我想使用异步/等待调用来实现多播委托之类的功能,因此如果多个客户端调用相同的

async
方法,当该值返回时,所有客户端都会收到它。

例如,使用纯回调可能是这样的(简化的):

struct DataSource {
    typealias Listener = (Value) -> Void
    private var listeners: [Listener] = []

    func fetchData(_ callback: Listener) {
        listeners.append(callback)

        let value = ... // Get data from some async service

        listeners.forEach { $0(value) }
    }
}

但是对于 async/await 我有点迷失,如果我有这个:

struct DataSource {
    func fetchData() async -> Value {
        let value = ... // Get data from some async service
        return value
    }
}

如何获取N个不同地方的返回值?不是新并发系统的专家,所以也许我错过了一些东西。

swift async-await
1个回答
0
投票

您可以按住

Task
而不是值,然后您就可以做您想做的事情:

let task = Task { try await fetchData() } // 👈 hold on to the task

let listener1 = await task.result
let listener2 = await task.result

请注意,这将不会调用任务两次,只是等待结果。

© www.soinside.com 2019 - 2024. All rights reserved.