Если я хочу прочитать или записать файл, я может использовать stream.BeginRead и stream.EndRead, но для этого требуются обратные вызовы и МНОГО уродливого, сложного кода с использованием модели асинхронного программирования.
Зачем мне хотеть использовать эти асинхронные методы ввода-вывода (которые используют скрытый пул потоков .NET), чем писать тот же код в синхронном стиле и передавать , который , в пул потоков. (Вместо того, чтобы рубить мой метод обратными вызовами.)
Обновление:
Некоторые (хорошие) ответы показывают, что использование APM избавляет меня от создания потока - с чем я согласен, поскольку каждый новый поток имеет свой собственный стек 2 МБ. Но где выполняются BeginRead и Endread? Пул потоков? Является ли повторное использование потока, который уже был выделен, единственным преимуществом?