Ich habe eine Serie Absende-Warteschlange erstellt mit:dispatch_async vs dispatch_sync Ausführungsreihenfolge
dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
Ich mag diese serielle Warteschlange verwenden Thread-Sicherheit für Klasse Zugang zu gewährleisten, während automatisch Arbeit tut asynchron, dass muss nicht zurück zum aufrufenden Thread.
- (void)addObjectToQueue:(id)object
{
dispatch_async(serialQueue, ^{
// process object and add to queue
});
}
- (BOOL)isObjectInQueue:(id)object
{
__block BOOL returnValue = NO;
dispatch_sync(serialQueue, ^{
// work out return value
});
return returnValue;
}
Wenn ich die addObjectToQueue nennen: Methode, rufen Sie sofort die isObjectInQueue: Methode, sind sie garantiert in der gleichen Reihenfolge ausgeführt werden, oder wird/könnte die isObjectInQueue erste ausführen?
Mit anderen Worten, verarbeitet dispatch_async genau dasselbe wie dispatch_sync (Blockierung des Blocks sofort), außer dass der aufrufende Thread nicht blockiert wird?
Ich habe ähnliche Fragen mit Antworten in beide Richtungen gesehen, also bin ich auf der Suche nach einer endgültigen Antwort, vorzugsweise mit Apple-Dokumentation gesichert.
"Wenn ich die addObjectToQueue: -Methode aufruft, dann rufe ich sofort die isObjectInQueue: -Methode auf, werden sie garantiert in der gleichen Reihenfolge ausgeführt, oder wird die isObjectInQueue zuerst ausgeführt?" Wenn Sie das fragen, meinen Sie wahrscheinlich "Können wir nach dem Objekt fragen, bevor es zur Warteschlange hinzugefügt wurde?". Denn offensichtlich laufen 2 Methoden so ab, dass sie aufgerufen werden, wenn sie auf demselben Thread aufgerufen werden. – krafter