Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
.NET предоставляет три шаблона для выполнения асинхронных операций:
Асинхронный шаблон на основе задач (TAP), который использует один метод для представления запуска и завершения асинхронной операции. TAP появился в .NET Framework 4. Рекомендуется использовать асинхронное программирование в .NET. Ключевые слова async и await в C# и операторы Async и Await в Visual Basic добавляют поддержку языка ДЛЯ TAP. Дополнительные сведения см. в статье "Асинхронный шаблон на основе задач" (TAP).
Асинхронный шаблон на основе событий (EAP), который является устаревшей моделью на основе событий для асинхронного поведения. Для этого требуется метод с суффиксом
Async
и один или несколько событий, типов делегатов для обработчиков событий и типов, производных отEventArg
. EAP появился в .NET Framework 2.0. Не рекомендуется для целей нового проектирования. Дополнительные сведения см. в статье "Асинхронный шаблон на основе событий" (EAP).Шаблон модели асинхронного программирования (APM) (также называемый IAsyncResult шаблоном), который является устаревшей моделью, которая использует IAsyncResult интерфейс для асинхронного поведения. В этом шаблоне асинхронные операции требуют
Begin
иEnd
методы (например,BeginWrite
иEndWrite
для реализации асинхронной операции записи). Этот шаблон больше не рекомендуется для новой разработки. Дополнительные сведения см. в статье об асинхронной модели программирования (APM).
Сравнение шаблонов
Для быстрого сравнения того, как три модели описывают асинхронные операции, рассмотрим Read
метод, который считывает определенное количество данных в предоставленный буфер, начиная с указанного смещения.
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
Аналог TAP этого метода откроет следующий единственный метод ReadAsync
.
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
Аналог в EAP откроет следующий набор типов и членов:
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
Эквивалент APM будет предоставлять методы BeginRead
и EndRead
:
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}