Разница в структурированном параллелизме между AddTask и addTaskUnlessCancelled Swift

#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 выдает некоторую ошибку.