#ios #swift #asynchronous #async-await #concurrency
Вопрос:
У меня есть путаница между звонком addTask()
и addTaskUnlessCancelled
. По определению addTask()
в вашей группе будет безоговорочно добавлена новая задача в group
func testCancellation() async { do { try await withThrowingTaskGroup(of: Void.self) { group -gt; Void in group.addTaskUnlessCancelled { print("added") try await Task.sleep(nanoseconds: 1_000_000_000) throw ExampleError.badURL } group.addTaskUnlessCancelled { print("added") try await Task.sleep(nanoseconds: 2_000_000_000) print("Task is cancelled: (Task.isCancelled)") } group.addTaskUnlessCancelled { print("added") try await Task.sleep(nanoseconds: 5_000_000_000) print("Task is cancelled: (Task.isCancelled)") } group.cancelAll() try await group.next() } } catch { print("Error thrown: (error.localizedDescription)") } } } }
Если вы хотите избежать добавления задач в отмененную группу, мы должны addTaskUnlessCancelled()
вместо этого использовать метод, но использование group.cancelAll()
-это добавление всех задач в группу, тогда в чем разница здесь и возвращаемое значение, которое возвращается true
только в том случае, если Task
выдает некоторую ошибку.