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

Делегаты позволяют вызывать синхронные методы асинхронно.Delegates enable you to call a synchronous method in an asynchronous manner. При синхронном вызове делегата метод Invoke вызывает целевой метод непосредственно в текущем потоке.When you call a delegate synchronously, the Invoke method calls the target method directly on the current thread. При вызове метода BeginInvoke среда CLR помещает запрос в очередь и сразу же передает управление вызывающему объекту.If the BeginInvoke method is called, the common language runtime (CLR) queues the request and returns immediately to the caller. Целевой метод вызывается асинхронно в потоке из пула потоков.The target method is called asynchronously on a thread from the thread pool. Исходный поток, отправивший этот запрос, продолжает выполняться параллельно с целевым методом.The original thread, which submitted the request, is free to continue executing in parallel with the target method. Если при вызове метода BeginInvoke был указан метод обратного вызова, то метод обратного вызова вызывается после завершения целевого метода.If a callback method has been specified in the call to the BeginInvoke method, the callback method is called when the target method ends. В методе обратного вызова метод EndInvoke получает возвращаемое значение и любые параметры ввода/вывода или только выходные параметры.In the callback method, the EndInvoke method obtains the return value and any input/output or output-only parameters. Если при вызове BeginInvoke не указан метод обратного вызова, EndInvoke можно вызвать из потока, который вызвал BeginInvoke.If no callback method is specified when calling BeginInvoke, EndInvoke can be called from the thread that called BeginInvoke.

Важно!

Компиляторы должны формировать классы делегатов с методами Invoke, BeginInvoke, и EndInvoke с использованием сигнатуры делегата, задаваемой пользователем.Compilers should emit delegate classes with Invoke, BeginInvoke, and EndInvoke methods using the delegate signature specified by the user. Методы BeginInvoke и EndInvoke должны быть объявлены как собственные.The BeginInvoke and EndInvoke methods should be decorated as native. Поскольку эти методы помечены как собственные, среда CLR автоматически обеспечивает реализацию во время загрузки класса.Because these methods are marked as native, the CLR automatically provides the implementation at class load time. Загрузчик проверяет, что эти методы не переопределены.The loader ensures that they are not overridden.

В этом разделеIn This Section

Асинхронный вызов синхронных методовCalling Synchronous Methods Asynchronously
Обсуждается использование делегатов для асинхронного вызова обычных методов, и приводятся примеры кода, демонстрирующие четыре способа ожидания возврата асинхронного вызова.Discusses the use of delegates to make asynchronous calls to ordinary methods, and provides simple code examples that show the four ways to wait for an asynchronous call to return.

Асинхронная модель на основе событий (EAP)Event-based Asynchronous Pattern (EAP)
Описывается асинхронное программирование в .NET Framework.Describes asynchronous programming with the .NET Framework.

См. такжеSee also