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