Асинхронные делегаты выполняются с использованием потока из пула потоков. Это уменьшает накладные расходы на создание потока вручную и его утилизацию. Потоки потоков имеют меньше накладных расходов, чем те, которые вы создаете вручную, и должны быть удалены.
Кроме того, выполнение метода в созданном вручную потоке дает вам больше контроля, например, возможность прерывать поток, прерывать его, проверять его состояние, устанавливать его приоритет и т. Д.
Асинхронные делегаты используются, если вы хотите быстро заставить метод выполняться асинхронно.
Кроме того, EndInvoke позволяет вам возвращать объект, который позволяет вам получить результаты выполнения. Thread.Join, хотя и функционально эквивалентен, не позволяет вам ничего возвращать.