InFlightValue (飞行中值)

等待已经在进行中的调用及其返回值。

一个常见的应用场景是,当并发调用需要身份验证密钥时,而这些密钥已过期,应该一次只刷新一个。 如果另一个执行线程已经启动了网络请求,这可以充当结果的队列。

用法

对于每个应该一次只执行一次的调用,创建一个新的 InFlightValueProvider 实例。

let value = InFlightValueProvider {
    [...]
    let (data, _) = try await URLSession.default.data(for: request)
    return data
}

let result1 = try await value.get()
// from another queue...
let result2 = try await value.get()

这确保了当请求正在进行中时,对值的后续调用将返回与原始调用相同的结果。 一旦该值已返回给所有等待的线程,提供程序将再次执行其工作。

安装

使用 Swift 包管理器,将此行作为依赖项添加到您的 Package.swift 文件中

    .package(url: "https://github.com/sgade/InFlightValue", from: "1.0.0"),