WithThrowingTaskGroup - Žádné volání na házení funkce se vyskytují v "snaží" výraz

0

Otázka

Problém:

Mám následující funkci, která zobrazuje varování No calls to throwing functions occur within 'try' expression

Otázky:

  • Proč je toto varování se zobrazí? (Kód uvnitř úkolem hodí chybu)
  • Co bych měl udělat, aby šíření chybu, aby volající f1?

Kód:

func f1() async throws {
    try await withThrowingTaskGroup(of: Int.self) { group in //No calls to throwing functions occur within 'try' expression
        group.addTask(priority: .high) {
            throw NSError()
        }
    }
}
async-await ios swift swift-concurrency
2021-11-23 09:38:23
1

Nejlepší odpověď

1

Máte opravdu nejmenuje žádné házení funkce, nebo hozen nic, v withThrowingTaskGroup uzavření. Právě jste přidal úkol pro skupinu spustit. To samo o sobě nebude nic házet. addTask není označen throws, i když jeho uzavření je parametr. To bude jen hodit, když budete čekat na dokončení úkolu v jedné cestě nebo jiný.

Například:

try await group.waitForAll()

Nebo pokud chcete smyčku přes každý úkol skupiny:

for try await someInt in group {
    // ...        
}

Pokud se vám vrátit něco, co v withThrowingTaskGroup uzavření, to je to, co withThrowingTaskGroup vrátí taky. Pokud se vám hodit chybu v uzavření, withThrowingTaskGroup bude to házet chybu (protože to je rethrows), a tak bude f1.

2021-11-23 09:53:38

Díky moc!, jen zvědavý nebyl withThrowingTaskGroup čekat na všechny úkoly dokončit, i když group.waitForAll() není vyvolána?
user1046037

@user1046037 Ano, to bude, podle dokumentace. Normálně by čekat na jeden nebo více úkolů ve skupině a dostat nějaký výsledek withThrowingTaskGroup vrátit, a to by bylo házení provoz. Ale ty nejsou tady, proto to upozornění. Pokud si nejste plánování na čeká nějaké hodnoty ze skupiny, pak waitForAll je to jen způsob, jak umlčet upozornění.
Sweeper

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................