La interfaz IAsyncCallback
no existe, por lo que no puede implementarla.
Sospecho que en realidad quieres saber sobre el IAsyncResult
interface.
Le recomiendo que lea this page en MSDN.
El IAsyncResult
interface representa una operación (por ejemplo, una petición web o una llamada base de datos) que se ejecuta en segundo plano, mientras que el código continúa ejecutándose. Le puede decir si la operación finalizó (la propiedad IsCompleted
). También le da una WaitHandle
object (la propiedad AsyncWaitHandle
) que se puede usar para esperar hasta que finalice la operación. (Llamando result.AsyncWaitHandle.WaitOne()
)
Usted consigue una IAsyncResult
llamando a un método Begin
Whatever
. (BeginExecuteReader
, BeginGetResponse
, y muchos otros). El método Begin
Whatever
tomará los parámetros necesarios para la operación (Por ejemplo, BeginExecuteReader
puede tomar un parámetro CommandBehavior
), y puede tomar un delegado AsyncCallback (no interfaz) y un parámetro de estado. En devuelve un objeto IAsyncResult
.
El delegado AsyncCallback es un método que usted proporciona, que se ejecutará cuando la operación finalice. Generalmente se llamará a un hilo diferente, así que ten cuidado. Su método AsyncCallback tendrá el mismo IAsyncResult que el método Begin
Whatever
que le dio anteriormente. El parámetro de estado se coloca en IAsyncResult e ignorado por el sistema; puede usarlo en su método AsyncCallback para hacer un seguimiento de para qué era la operación.(El estado puede ser lo que quiera que sea, incluyendo null
)
Dentro de su AsyncCallback (o en cualquier otro lugar), se puede llamar al método End
Whatever
que se corresponde con el método Begin
Whatever
os llamó por la primer lugar. Debe darle IAsyncResult desde Begin
Whatever
o desde AsyncCallback. Cuando lo llame, esperará a que finalice la operación (si aún no ha terminado) y luego le devolverá el resultado de la operación. (Suponiendo que la operación devuelve algo, por ejemplo, WebRequest.EndGetResponse
devolverá un WebResponse
). Si se produce algún error durante la operación, End
Whatever
arrojará una excepción.
Debería implementar IAsyncResult si desea crear su propia operación que se pueda ejecutar en segundo plano. También crearía Begin
Whatever
y End
Whatever
métodos que lo devuelven y lo toman, respectivamente. Para obtener más información sobre la implementación de IAsyncResult, consulte here.
Error de error tipográfico. Como ha dicho, necesito una aclaración sobre IAsyncResult.Gracias por su explicación. – user160677
Excelente explicación muchas gracias – user160677