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