2010-05-19 13 views

Respuesta

6

Primero los delegados. Cuando se declara una, el compilador genera automáticamente tres métodos para el tipo de delegado:

  • Invoke (...), teniendo los mismos argumentos que la declaración de delegado
  • BeginInvoke (..., AsyncCallback, objeto) donde ... son los argumentos declarados
  • EndInvoke (IAsyncResult)

el Invoke() método llama al delegado de destino de forma sincrónica, al igual que una llamada normal. El método BeginInvoke() es la llamada asincrónica, el método de destino se ejecuta en un subproceso de grupo de subprocesos. La llamada a EndInvoke() es necesaria después de que el método se complete para liberar los recursos asignados para la llamada y volver a generar cualquier excepción que podría haber abortado la llamada.

El .NET framework contiene muchas clases que tienen un método BeginXxxx(). MSDN Library se refiere a ellos como operaciones asincrónicas, no como métodos asincrónicos. Comienzan una operación que se completa de forma asíncrona.

Comenzando con .NET 4.5 y soportado por la versión 5 de C#, las operaciones asíncronas cuyo nombre finaliza en Async y devuelve una Tarea se pueden llamar en una expresión aguarda. Cuando se utiliza en un método que tiene el modificador async. Esto simplifica enormemente el manejo de operaciones asincrónicas, importantes en WinRT donde muchas operaciones comunes son asincrónicas.

+5

Esto ya no es cierto en C# 5 (Visual Studio Dev11 Preview) C# tiene soporte adecuado para los métodos "asincrónicos". –

Cuestiones relacionadas