Введение в асинхронность в C#
Чтение файла и ответ сервера занимают время, в которое процессору нечего считать. Если метод просто ждёт, он занимает поток, и интерфейс или другие запросы стоят. Асинхронность как раз про это ожидание.
Операция описывается задачей: работой, которая завершится позже. Метод доходит до ожидания, отпускает поток и продолжается с того же места, когда задача готова. Писать отдельный обратный вызов на каждый шаг не нужно.
Так ускоряют ввод и вывод, а не тяжёлый расчёт. Пока процессор сам занят вычислениями, ожидать нечего, и там по-прежнему нужен поток. Ошибка и отмена проходят через ту же задачу, а не через отдельный канал.