dispatch() ставить завдання в чергу: запит закінчується одразу, а роботу пізніше виконає воркер. dispatchSync() виконує handle() тут і зараз, у поточному процесі, черга не задіяна.
SendWelcomeEmail::dispatch($user); // у чергу - відповідь не чекає листа
SendWelcomeEmail::dispatchSync($user); // одразу - запит чекає, поки лист піде
Коли що:
dispatch()- для всього, що може зачекати й не потрібне користувачу в цій відповіді: листи, обробка зображень, звернення до зовнішніх API.dispatchSync()- у консольних командах і сідерах, де черга нічого не дає, і коли результат потрібен негайно.
Важливо: якщо клас не реалізує ShouldQueue, навіть dispatch() виконає його одразу. А в Laravel 13 є ще проміжний варіант - підключення deferred: завдання виконається в тому самому процесі, але після відправки відповіді користувачу, без воркера.