Estoy usando métodos asíncronos en algunos de mis proyectos y me gusta, ya que permite que mi aplicación sea mucho más escalable. Sin embargo, me pregunto cómo los métodos asíncronos realmente funcionan en segundo plano. ¿Cómo sabe .NET (o Windows?) Que se ha completado una llamada? Dependiendo de la cantidad de llamadas asincrónicas que hice, puedo ver que se crean nuevos hilos (aunque no siempre ...). ¿Por qué?¿Cómo funcionan los métodos asíncronos en C#?
Además, me gustaría controlar cuánto tiempo tarda una solicitud en completarse. Para probar el concepto, escribí el siguiente código que llama asíncronamente a un servicio web e inmediatamente después se inicia un cronómetro.
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
esto no funciona ya que todas las peticiones (10000) tienen la misma hora de inicio y la duración va a subir de forma lineal (llamada 0 = 1 duración, llame al 1 = duración de 2, etc.). ¿Cómo podría controlar la duración real de una llamada con método asíncrono (desde el momento en que la solicitud se ejecuta realmente hasta el final)?
ACTUALIZACIÓN: ¿Tiene bloquear un método asíncrono el flujo? Entiendo que usa el .NET ThreadPool
, pero ¿cómo sabe un IAsyncResult
que se ha completado una llamada y es hora de llamar al método CallBack
?
1. ThreadPool, 2. Consulte los detalles sobre cómo funciona el ThreadPool, pero no creo que lo que desea sea posible de forma genérica. http://msdn.microsoft.com/en-us/library/ms973903.aspx –