Die Warteschlange main
unterscheidet sich nicht von anderen Warteschlangen in Bezug darauf, ob Sie synchron oder asynchron etwas in die Warteschlange stellen können.
Die einzige Regel, die Sie beachten müssen, ist, niemals sync
zu verwenden, um etwas in die selbe Warteschlange einzuordnen, die gerade verwendet wird. Das wird einen Deadlock verursachen. Auch dies gilt unabhängig von der Warteschlange, Haupt oder nicht.
Um Ihre Frage zu beantworten "Ist das gleiche wie" - nein, es ist nicht das Gleiche. Unter der Annahme, dass beide Codesätze aus einer Hintergrundwarteschlange aufgerufen werden, wird sich die Hintergrundwarteschlange in dem ersten Satz von Code weiter bewegen, ohne zu berücksichtigen, wann die zwei Blöcke schließlich in der Hauptwarteschlange ausgeführt werden. In der zweiten Codegruppe (unter Verwendung von sync
) blockiert die Hintergrundwarteschlange jedes Mal, bis jeder Codeblock in der Hauptwarteschlange ausgeführt wird.
Wenn beide Codesätze aus der Hauptwarteschlange aufgerufen werden, gibt es einen größeren Unterschied. Der erste Code-Satz (mit async
) funktioniert weiter. Der zweite Code-Satz (mit sync
) führt dazu, dass die Hauptwarteschlange beim ersten Anruf an sync
blockiert wird und Ihre App nicht mehr reagiert, bis der Benutzer (oder das Betriebssystem) sie beendet.
Der einzige möglicherweise relevante Unterschied zwischen der Hauptwarteschlange und anderen Warteschlangen besteht darin, dass die Hauptwarteschlange immer eine serielle Warteschlange ist, während Hintergrundwarteschlangen entweder seriell oder gleichzeitig sein können. Beide haben jedoch eine gültige Verwendung für sync
oder async
, solange Sie vermeiden, sync
zu verwenden, wo beide Warteschlangen identisch sind.
* "wenn Hauptwarteschlange immer sync ist" * - meinst du "seriell"? –
Es gibt serielle und gleichzeitige Warteschlangen, die Sie synchron und asynchron an beide senden können. –
Mögliches Duplikat von [Grand Central Dispatch async vs. sync] (https://stackoverflow.com/questions/9200558/grand-central-dispatch-async-vs-sync) –