Différence entre dispatch_async et dispatch_sync sur la série de la file d'attente?

J'ai créé une série de file d'attente comme ceci:

    dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL);

Quelle est la différence entre dispatch_async appelle

 dispatch_async(_serialQueue, ^{ /* TASK 1 */ });
 dispatch_async(_serialQueue, ^{ /* TASK 2 */ });

Et dispatch_sync appelé comme ça sur cette série de file d'attente?

 dispatch_sync(_serialQueue, ^{ /* TASK 1 */ });
 dispatch_sync(_serialQueue, ^{ /* TASK 2 */ });

Ma compréhension est que, indépendamment de la méthode dispatch est utilisé, TASK 1 seront exécutées et achevées avant TASK 2, correct?