面试题答案
一键面试-
使用Task创建并发任务的基本步骤:
- 导入必要模块:在Swift中,并发编程相关功能在
Foundation
模块中,一般情况下,该模块默认导入,无需显式导入。 - 创建Task:使用
Task
结构体来创建并发任务。Task
可以接受一个闭包作为参数,闭包中的代码就是要并发执行的任务。例如:
let task = Task { // 这里写并发执行的代码 let result = await someAsyncFunction() return result }
- 获取任务结果(如果需要):如果任务有返回值,可以通过
await task.value
来获取任务执行完成后的返回值。这里需要在async
函数中执行。
- 导入必要模块:在Swift中,并发编程相关功能在
-
在一个函数中创建多个并发执行的Task,同时等待所有Task完成后再返回结果的示例:
import Foundation
func someAsyncFunction(_ num: Int) async -> Int {
// 模拟异步操作,这里简单返回一个值
return num * 2
}
func performConcurrentTasks() async -> [Int] {
let tasks: [Task<Int, Never>] = (1...3).map { num in
Task {
await someAsyncFunction(num)
}
}
let results = await withTaskGroup(of: Int.self) { group in
tasks.forEach { task in
group.addTask { await task.value }
}
return try! await group.reduce(into: []) { partialResult, element in
partialResult.append(element)
}
}
return results
}
// 调用示例
Task {
let finalResults = await performConcurrentTasks()
print(finalResults)
}
在上述示例中:
someAsyncFunction
是一个模拟的异步函数,返回传入数字的两倍。performConcurrentTasks
函数中,首先使用map
创建了多个Task
,每个Task
执行someAsyncFunction
。- 然后使用
withTaskGroup
来等待所有Task
完成,并收集它们的返回值。withTaskGroup
提供了一种方便的方式来管理一组并发任务,并在所有任务完成后进行统一处理。最后返回所有任务的结果数组。 - 最后通过
Task
调用performConcurrentTasks
来演示整个流程。