请解释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
方法中,那么sender
和e
的两个参数是什么?
它为timer
的Elapsed
事件分配一个异步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。