Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
.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);
}