MST

星途 面试题库

面试题:Swift中如何使用Task实现并发任务

请描述在Swift中使用Task创建并发任务的基本步骤,并举例说明如何在一个函数中创建多个并发执行的Task,同时等待所有Task完成后再返回结果。
13.1万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试
  1. 使用Task创建并发任务的基本步骤

    • 导入必要模块:在Swift中,并发编程相关功能在Foundation模块中,一般情况下,该模块默认导入,无需显式导入。
    • 创建Task:使用Task结构体来创建并发任务。Task可以接受一个闭包作为参数,闭包中的代码就是要并发执行的任务。例如:
    let task = Task {
        // 这里写并发执行的代码
        let result = await someAsyncFunction()
        return result
    }
    
    • 获取任务结果(如果需要):如果任务有返回值,可以通过await task.value来获取任务执行完成后的返回值。这里需要在async函数中执行。
  2. 在一个函数中创建多个并发执行的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来演示整个流程。