Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
.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);
}