С# 3.0 в двух словах говорит, что асинхронные методы и асинхронные делегаты похожи, но поведение очень отличается.
Вот что говорит книга обо всех.
Асинхронные методы
- Редко или никогда не блокирует нить.
- Метод Begin не может сразу вернуться к вызывающему.
- Согласованный протокол без поддержки языка С#.
Асинхронные делегаты
- Может блокироваться на любое время
- BeginInvoke немедленно возвращается к вызывающему.
- Встроенная поддержка компилятора.
В книге также говорится: Цель асинхронных методов - разрешить многим задачам работать на нескольких потоках; целью асинхронных делегатов является выполнение задачи параллельно с вызывающим.
Когда я просмотрел метод BeginRead() в классе System.IO.Stream через отражатель, он использует делегат и вызывает на нем BeginInvoke. Таким образом, асинхронный метод использует внутренний асинхронный делегат.
- В таком случае, как можно сказать, что их поведение отличается? Поскольку он использует делегаты внутри страны, возможно ли сравнение, подобное приведенному выше?
- Считаете ли вы, что работа с методом BeginXXX для делегата - это способ выполнить функцию параллельно с вызывающим?
- Каков правильный способ реализации асинхронных методов, поддерживая все преимущества, такие как хорошее использование CPU?
Любые мысли?