在 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
有以下几种可能的值:
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
,并在所有 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