Есть много вещей, которые можно уловить в термине "асинхронная разработка".
Например, вы можете выполнить код в фоновом потоке .Недавно я обновил мой блог , в котором противопоставлены несколько общих подходов к выполнению кода в фоновом режиме.Вот список в порядке от наиболее желательного к наименьшему:
Task
(используется async / await). Task
(используется библиотекой параллельных задач). BackgroundWorker
. Delegate.BeginInvoke
. ThreadPool.QueueUserWorkItem
. Thread
С другой стороны, вы можете представить асинхронную операцию (которая может быть или не быть реальным кодом, выполняемым в фоновом потоке).В этом случае существует несколько подходов в порядке от наиболее желательного к наименьшему:
Task
(в стиле Асинхронный шаблон на основе задач (TAP) ) IAsyncResult
с методами Begin*
/ End*
(с неудачным названием Модель асинхронного программирования (APM) ). - Компонент, написанный с использованием Асинхронный шаблон на основе событий (EAP) .
(Примечание: BackgroundWorker
- это EAP, а Delegate.BeginInvoke
- это APM).
С другой стороны, вы можете иметь в виду асинхронное программирование в целом, что можно интерпретировать как реактивный подход.В этом случае мне известны только два подхода:
- Реактивные расширения (Rx) .
- Асинхронный шаблон на основе событий (EAP) .
Однако вы могли бы доказать, что любая программа, управляемая событиями, до некоторой степени реагирует, поэтому простая обработка событий пользовательского интерфейса является (простой)форма «асинхронного программирования».
Кроме того, это только общие модели.Любая платформа или библиотека может добавить больше.Вот некоторые из них:
- Класс
Socket
имеет специальную форму APM, которую можно использовать для минимизации выделения памяти.Он работает очень похоже на APM, но не соответствует шаблону. - Среда выполнения WinRT (в Windows 8) имеет собственные представления асинхронных операций (
IAsyncOperation<TResult>
и IAsyncInfo
). - Windows Phone имеет специальную поддержку фонового агента , который позволяет запускать код в фоновом режиме, даже если ваше приложение в данный момент не работает.