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

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

Важно!

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

Содержание

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

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

См. также раздел