Я понимаю, что вся параллельная работа внутри актора каким-то образом меняется на последовательную в рамках какого-то процесса синхронизации. Мы видим, что async let-работа, которая должна выполняться параллельно, выполняется последовательно в Actor1, скорее всего, из-за внутренней синхронизации актера. Но работа withTaskGroup выполняется параллельно, несмотря на внутреннюю синхронизацию AnActor, но ПОЧЕМУ?)
Изменить: в то же время я хочу сказать, что я понимаю, как работает синхронизация при вызове извне внутренностей актера при использовании await, но я не понимаю, как работает синхронизация внутри актера, для вызова асинхронных параллельных задач внутри актера .
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView().task {
//await AnActor().performAsyncTasks() // uncomment this alternately and run
//await Actor1().performAsyncTasks() // uncomment this alternately and run
}
}
}
}
actor Actor1 {
func performAsyncTasks() async {
async let _ = asyncTasks1() // this not running in parallel
async let _ = asyncTasks2() // this not running in parallel
}
func asyncTasks1() async {
for i in 1...10_000_0 {
print("In Task 1: \(i)")
}
}
func asyncTasks2() async {
for i in 1...10_000_0 {
print("In Task 2: \(i)")
}
}
} // the printed text are in series with Task 1 and Task 2 in console
actor AnActor {
var value = 0
func performAsyncTasks() async {
value = await withTaskGroup(of: Int.self) { group in
group.addTask { // this running in parallel, why?!
var value1 = 0
for _ in 1...10_000 {
print("Task1")
value1 += 1
}
return value1
}
group.addTask { // this running in parallel, why?!
var value2 = 0
for _ in 1...10_000 {
value2 += 1
print("Task2")
}
return value2
}
return await group.reduce(0, +)
}
print(value)
}
} // the printed text are mixed with Task 1 and Task 2 in console
Подробнее здесь: https://stackoverflow.com/questions/765 ... side-actor
Почему работа с TaskGroup внутри Actor выполняется параллельно? ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение