请解释Timer事件async / await语法

我在这里和这里研究了asynch和await语法。 它真的有助于理解用法,但我在MSDN上找到了一个有趣的语法示例,我只是不明白。

:有人可以向我解释一下这个System.Timers.Timer事件注册的语法与asynch await:为什么你可以使用lambda表达式中已经存在的async await关键字?

 Timer timer = new Timer(1000); timer.Elapsed += async ( sender, e ) => await HandleTimer(); private Task HandleTimer() { Console.WriteLine("\nHandler not implemented..." ); } 

问题2:如果sender没有出现在HandleTimer方法中,那么sendere的两个参数是什么?

它为timerElapsed事件分配一个异步lambda。 您可以通过这种方式理解异步lambda:首先,以下是lambda:

 (sender, e) => HandleTimer() 

这个lambda同步调用HandleTimer 。 然后我们添加await以异步调用HandleTimer

 (sender, e) => await HandleTimer() 

但这不起作用,因为异步调用某些东西你必须自己异步,因此async关键字:

 async (sender, e) => await HandleTimer() 

这只是一个异步的lambda表达式 。 它相当于:

 timer.Elapsed = CallHandleTimer; async void CallHandleTimer(object sender, EventArgs e) { await HandleTimer(); } 

您给出的代码是一个写为lambda表达式的匿名函数。

所以真正发生的事情是,对于计时器已用事件,您将EventHandler指定为async ( sender, e ) => await HandleTimer();

这转化为类似的东西

 timer.Elapsed += AnonFunc; async void AnonFunc(object sender, EventArgs e) { await HandleTImer(); } 

看起来正是骚扰你的lambda。