请解释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。
上述就是C#学习教程:请解释Timer事件async / await语法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006256.html