Task
在 Swift 中,Task 是一种用于表示异步计算的结构体。它是 Swift 并发编程模型的核心组成部分,允许你以声明式的方式编写异步代码。Task 可以让你轻松地启动、管理和监控异步操作。
创建 Task
你可以使用 Task 构造函数来创建一个新的 Task。通常,你会在一个 async 函数内部创建 Task,以便它可以异步执行。
func startAsyncTask() async {
let task = Task {
// 异步操作
await someAsyncFunction()
}
}启动 Task
创建 Task 后,它会自动启动并开始执行异步操作。你不需要显式调用任何方法来启动它。
func startAsyncTask() async {
let task = Task {
// 异步操作
await someAsyncFunction()
}
}等待 Task 完成
你可以使用 await 关键字来等待 Task 完成。这会暂停当前 async 函数的执行,直到 Task 完成为止。
func startAsyncTask() async {
let task = Task {
// 异步操作
await someAsyncFunction()
}
await task.value // 等待任务完成并获取结果
}取消 Task
你可以使用 cancel() 方法来取消一个 Task。取消操作会立即停止 Task 的执行,并抛出一个 CancellationError 异常。
func startAsyncTask() async {
let task = Task {
try await withUnsafeThrowingContinuation { continuation in
// 异步操作
continuation.resume(throwing: CancellationError())
}
}
task.cancel() // 取消任务
}监控 Task 状态
你可以使用 Task.Status 枚举来监控 Task 的状态。Task.Status 有以下几种可能的值:
.active:Task正在执行。.suspended:Task已暂停。.cancelled:Task 已取消。.finished:Task已完成。
func monitorTaskStatus() async {
let task = Task {
// 异步操作
await someAsyncFunction()
}
while !task.isCancelled {
switch task.status {
case .active:
print("Task is active")
case .suspended:
print("Task is suspended")
case .cancelled:
print("Task is cancelled")
case .finished:
print("Task is finished")
@unknown default:
break
}
try? await Task.sleep(nanoseconds: 1_000_000_000) // 每秒检查一次状态
}
}使用 async let 并发执行多个 Task
async let 并发执行多个 Task你可以使用 async let 来并发执行多个 Task,并在所有 Task 完成后处理它们的结果。
func concurrentTasks() async {
async let task1 = someAsyncFunction1()
async let task2 = someAsyncFunction2()
let (result1, result2) = await (task1, task2)
print("Results: \(result1), \(result->2)")
}通过这些示例,你可以看到如何在 Swift 中使用 Task 来编写异步代码。Task 提供了一种简单且强大的方式来管理异步操作,使得编写并发代码更加容易和安全。
Last updated