español - create async method c#
Por favor, explique la sintaxis async/await del evento Timer (3)
Asigna un lambda asíncrono al evento Elapsed
del timer
. Puedes entender la async lambda de esta manera: primero, la siguiente es una lambda:
(sender, e) => HandleTimer()
esta lambda llama a HandleTimer
sincrónicamente. Luego agregamos una espera para llamar a HandleTimer
asincrónicamente:
(sender, e) => await HandleTimer()
pero esto no funcionará porque para llamar a algo de forma asíncrona tienes que ser asincrónico tú mismo, de ahí la palabra clave async
:
async (sender, e) => await HandleTimer()
Investigué el asynch y espero la sintaxis aquí y aquí . Realmente ayuda a entender el uso, pero encontré un ejemplo de sintaxis intrigante en MSDN que simplemente no entiendo.
Pregunta : ¿Podría alguien explicarme la sintaxis de este System.Timers.Timer
evento de registro con asynch aguardar: ¿Por qué puede utilizar la función async
palabras clave que ya están en la expresión lambda?
Timer timer = new Timer(1000);
timer.Elapsed += async ( sender, e ) => await HandleTimer();
private Task HandleTimer()
{
Console.WriteLine("/nHandler not implemented..." );
}
Pregunta 2: ¿Y para qué sirven los dos parámetros sender
& e
si no aparecen en el método HandleTimer
?
El código que ha dado es una función anónima escrita como una expresión lambda.
Entonces, lo que realmente está sucediendo es que, para el evento transcurrido del temporizador, está asignando EventHandler como async ( sender, e ) => await HandleTimer();
.
que se traduce a algo así como
timer.Elapsed += AnonFunc;
async void AnonFunc(object sender, EventArgs e)
{
await HandleTImer();
}
Parece que es la lambda la que te está molestando.
Esta es solo una expresión lambda asíncrona. Es equivalente a:
timer.Elapsed = CallHandleTimer;
async void CallHandleTimer(object sender, EventArgs e)
{
await HandleTimer();
}