C# 请解释计时器事件异步/等待语法
我研究了asynch和await语法以及。这确实有助于理解用法,但我发现了一个有趣的语法示例,我就是不明白 问题: 有人能给我解释一下asynch wait事件注册的C# 请解释计时器事件异步/等待语法,c#,events,asynchronous,timer,async-await,C#,Events,Asynchronous,Timer,Async Await,我研究了asynch和await语法以及。这确实有助于理解用法,但我发现了一个有趣的语法示例,我就是不明白 问题: 有人能给我解释一下asynch wait事件注册的System.Timers.Timer的语法吗 为什么可以使用lambda表达式中已有的asyncawait关键字 Timer timer = new Timer(1000); timer.Elapsed += async ( sender, e ) => await HandleTimer(); private Task
System.Timers.Timer的语法吗
为什么可以使用lambda表达式中已有的async
await
关键字
Timer timer = new Timer(1000);
timer.Elapsed += async ( sender, e ) => await HandleTimer();
private Task HandleTimer()
{
Console.WriteLine("\nHandler not implemented..." );
}
问题2:
如果HandleTimer
方法中没有出现sender
和e
这两个参数,那么这两个参数有什么好处呢?这只是一个异步参数。这相当于:
timer.Elapsed = CallHandleTimer;
async void CallHandleTimer(object sender, EventArgs e)
{
await HandleTimer();
}
这只是一个异步过程。这相当于:
timer.Elapsed = CallHandleTimer;
async void CallHandleTimer(object sender, EventArgs e)
{
await HandleTimer();
}
它将异步lambda分配给计时器
的已用
事件。您可以这样理解异步lambda:首先,下面是一个lambda:
(sender, e) => HandleTimer()
此lambda同步调用HandleTimer
。然后我们添加一个wait来异步调用HandleTimer
:
(sender, e) => await HandleTimer()
但这不起作用,因为要异步调用某个对象,您必须自己异步,因此使用async
关键字:
async (sender, e) => await HandleTimer()
它将异步lambda分配给计时器
的已用
事件。您可以这样理解异步lambda:首先,下面是一个lambda:
(sender, e) => HandleTimer()
此lambda同步调用HandleTimer
。然后我们添加一个wait来异步调用HandleTimer
:
(sender, e) => await HandleTimer()
但这不起作用,因为要异步调用某个对象,您必须自己异步,因此使用async
关键字:
async (sender, e) => await HandleTimer()
您给出的代码是以lambda表达式编写的匿名函数
因此,真正发生的是,对于计时器已过事件,您将EventHandler分配为async(sender,e)=>wait HandleTimer()代码>
也就是说
timer.Elapsed += AnonFunc;
async void AnonFunc(object sender, EventArgs e)
{
await HandleTImer();
}
似乎是lambda绊倒了您。您给出的代码是一个以lambda表达式编写的匿名函数
因此,真正发生的是,对于计时器已过事件,您将EventHandler分配为async(sender,e)=>wait HandleTimer()代码>
也就是说
timer.Elapsed += AnonFunc;
async void AnonFunc(object sender, EventArgs e)
{
await HandleTImer();
}
似乎是lambda绊倒了你。这只是一个使用lambda语法声明的匿名方法。它也恰好是异步的。你对哪一部分感到困惑?我想lambda语法让我困惑了。请大家解释一下向下投票,以避免将来出现这种情况。人们喜欢很快地跳上向上投票/向下投票的火车。不过我想说的是,在将来,试着解释一下你到底不明白什么。这只是一个使用lambda语法声明的匿名方法。它也恰好是异步的。你对哪一部分感到困惑?我想lambda语法让我困惑了。请大家解释一下向下投票,以避免将来出现这种情况。人们喜欢很快地跳上向上投票/向下投票的火车。不过我想说的是,在将来,试着解释一下你到底不明白什么。这是一个很好的解释。现在我明白了,两个参数sender
和e
是HandleTimer
方法的输入参数。@MongZhuasync(sender,e)=>await HandleTimer(sender,e)
ok,这看起来很全面。这意味着,如果HandleTimer
没有参数,那么事件只能在类内部触发,对吗?这是一个很好的解释。现在我明白了,两个参数sender
和e
是HandleTimer
方法的输入参数。@MongZhuasync(sender,e)=>await HandleTimer(sender,e)
ok,这看起来很全面。这意味着,如果HandleTimer
没有参数,那么事件只能在类内触发,对吗?是的,我不知道可以使用lambda行中已经存在的关键字。是的,我不知道可以使用lambda行中已经存在的关键字。