¿Cuál es el beneficio de usar dispatch_sync si tiene que esperar hasta que se complete el hilo principal?

¿Por qué alguien usaría dispatch_sync si el bloque tiene que esperar hasta que termine el subprocess principal? ¿Cuál es el beneficio de usar esta function en lugar de escribir código en línea (sin bloque y fuera de Grand Central Dispatch)? Puede que no entienda lo que hace realmente despatch_sync. Gracias.

dispatch_sync hace lo que piensa: publica el bloque en la queue designada y bloquea la queue actual hasta que se haya ejecutado el bloque. La queue / subprocess principal no está involucrada específicamente a less que se esté enviando o desde ella.

Por lo tanto, generalmente lo usaría si una operación tuviera que realizarse en una queue / subprocess diferente, como una operación SQLite u OpenGL, pero necesitaba el resultado de la operación o simplemente necesitaba saber que la operación estaba completa para términos de funcionalidad

El patrón:

  dispatch_async(otherQueue, ^{ id result = doHardTask(); dispatch_async(originalQueue, ^{ didGetResult(result); }); }); 

Es una mejor práctica, pero no es algo que puedas pegar al final.

Puede usar dispatch_async para iniciar una queue simultánea y dentro del bloque asociado con esa llamada podría usar dispatch_sync para iniciar una serie de tareas en una segunda queue. Todo esto ocurriría sin bloquear la queue principal.