AsyncCollections(异步集合)

用于在 Swift 集合上运行异步进程的函数

ForEach(循环)

在 Sequence(序列)的每个元素上运行一个异步函数。

await array.asyncForEach {
    await asyncProcess($0)
}

这些异步闭包是串行运行的,即必须先完成对序列当前元素运行的闭包,然后才能对下一个元素运行闭包。

要并发运行闭包,请使用

try await array.concurrentForEach {
    try await asyncProcess($0)
}

您可以使用 maxConcurrentTasks 参数来管理一次运行的任务数量。

try await array.concurrentForEach(maxConcurrentTasks: 4) {
    try await asyncProcess($0)
}

Map(映射)

返回一个通过异步函数转换后的数组。

let result = await array.asyncMap {
    return await asyncTransform($0)
}

asyncForEach 类似,asyncMap 也有并发运行转换的版本。

let result = await array.concurrentMap(maxConcurrentTasks: 8) {
    return await asyncTransform($0)
}

Compact Map(紧凑映射)

返回一个非可选数组,该数组通过一个异步函数转换,该函数返回可选结果。

let result: [MyType] = await array.asyncCompactMap { value -> MyType? in
    return await asyncTransform(value)
}

asyncForEach 类似,asyncCompactMap 也有并发运行转换的版本。

let result: [MyType] = await array.concurrentCompactMap(maxConcurrentTasks: 8) { value -> MyType? in
    return await asyncTransform(value)

FlatMap(扁平映射)

返回一个连接的数组,该数组通过一个返回序列的异步函数转换。

let result: [MySequence.Element] = await array.asyncMap { value -> MySequence in
    return await asyncTransform($0)
}

asyncForEach 类似,asyncFlatMap 也有并发运行转换的版本。

let result: [MySequence.Element] = await array.concurrentMap(maxConcurrentTasks: 8) { value -> MySequence in
    return await asyncTransform($0)
}

Filter(过滤)

返回一个通过异步函数转换后的过滤数组。

let result = await array.asyncFilter {
    return await asyncTransform($0)
}

asyncForEach 类似,asyncFilter 也有并发运行转换的版本。

let result = await array.concurrentFilter(maxConcurrentTasks: 8) {
    return await asyncTransform($0)
}