Асинхронное программирование с использованием делегатов

Делегаты позволяют вызывать синхронные методы асинхронно. При синхронном вызове делегата метод Invoke вызывает целевой метод непосредственно в текущем потоке. При вызове метода BeginInvoke среда CLR помещает запрос в очередь и сразу же передает управление вызывающему объекту. Целевой метод вызывается асинхронно в потоке из пула потоков. Исходный поток, отправивший этот запрос, продолжает выполняться параллельно с целевым методом. Если при вызове метода BeginInvoke был указан метод обратного вызова, то метод обратного вызова вызывается после завершения целевого метода. В методе обратного вызова метод EndInvoke получает возвращаемое значение и любые параметры ввода/вывода или только выходные параметры. Если при вызове BeginInvoke не указан метод обратного вызова, EndInvoke можно вызвать из потока, который вызвал BeginInvoke.

Внимание

Компиляторы должны формировать классы делегатов с методами Invoke, BeginInvoke, и EndInvoke с использованием сигнатуры делегата, задаваемой пользователем. Методы BeginInvoke и EndInvoke должны быть объявлены как собственные. Поскольку эти методы помечены как собственные, среда CLR автоматически обеспечивает реализацию во время загрузки класса. Загрузчик проверяет, что эти методы не переопределены.

В этом разделе

Асинхронный вызов синхронных методов
Обсуждается использование делегатов для асинхронного вызова обычных методов, и приводятся примеры кода, демонстрирующие четыре способа ожидания возврата асинхронного вызова.

Асинхронная модель на основе событий (EAP)
Описание асинхронного программирования в .NET.

См. также