1) Вы застряли в однопоточном окружении , таком как silverlight.Здесь у вас нет выбора, кроме как использовать асинхронные вызовы, иначе весь пользовательский поток заблокируется.
2) У вас много вызовов, обработка которых занимает много времени. Зачем блокировать весь потоккогда это может продолжаться и делать другие вещи в ожидании возвращения?Например, если у меня есть пять вызовов функций, каждый из которых занимает 5 секунд, я хотел бы сразу запустить их все и вернуть их при необходимости.
3) Слишком много данных для обработки на выходе синхронно.Если у меня есть программа, которая записывает 10 гигабайт данных на консоль, и я хочу прочитать вывод, у меня есть возможность асинхронно обрабатывать построчно.Если я сделаю это синхронно, мне не хватит места в буфере и заблокирую программу.