C# 请解释计时器事件异步/等待语法

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

我研究了asynch和await语法以及。这确实有助于理解用法,但我发现了一个有趣的语法示例,我就是不明白

问题: 有人能给我解释一下asynch wait事件注册的
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
方法的输入参数。@MongZhu
async(sender,e)=>await HandleTimer(sender,e)
ok,这看起来很全面。这意味着,如果
HandleTimer
没有参数,那么事件只能在类内部触发,对吗?这是一个很好的解释。现在我明白了,两个参数
sender
e
HandleTimer
方法的输入参数。@MongZhu
async(sender,e)=>await HandleTimer(sender,e)
ok,这看起来很全面。这意味着,如果
HandleTimer
没有参数,那么事件只能在类内触发,对吗?是的,我不知道可以使用lambda行中已经存在的关键字。是的,我不知道可以使用lambda行中已经存在的关键字。