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