Programación asincrónica mediante delegados
Los delegados permiten llamar a métodos sincrónicos de forma asincrónica. Cuando se llama a un delegado sincrónicamente, el método Invoke
llama al método de destino directamente en el subproceso actual. Si se llama al método BeginInvoke
, Common Language Runtime (CLR) coloca la solicitud en cola y devuelve inmediatamente el control al elemento que lo llamó. El método de destino se llama asincrónicamente desde un subproceso del grupo de subprocesos. El subproceso original, que envió la solicitud, puede continuar ejecutándose en paralelo con el método de destino. Si se ha especificado un método de devolución de llamada en la llamada al método BeginInvoke
, el método de devolución de llamada se llama cuando finaliza el método de destino. En el método de devolución de llamada, el método EndInvoke
obtiene el valor devuelto y cualquier parámetro de entrada y salida o de solo salida. Si no se especifica ningún método de devolución de llamada al llamar a BeginInvoke
, se puede llamar a EndInvoke
desde el subproceso que llamó a BeginInvoke
.
Importante
Los compiladores deben emitir clases de delegados con los métodos Invoke
, BeginInvoke
y EndInvoke
mediante la firma de delegados que especifique el usuario. Los métodos BeginInvoke
y EndInvoke
deben representarse como nativos. Debido a que estos métodos están marcados como nativos, Common Language Runtime proporciona automáticamente la implementación en el momento en que se carga la clase. El cargador se asegura de que no se reemplazarán.
En esta sección
Llamada a métodos sincrónicos de forma asincrónica
Describe el uso de los delegados para realizar llamadas asincrónicas a métodos ordinarios y proporciona ejemplos de código sencillos en los que se muestran los cuatro mecanismos que existen para esperar a que una llamada asincrónica devuelva datos.
Secciones relacionadas
Modelo asincrónico basado en eventos (EAP)
Se describe la programación asincrónica en .NET.