c# - 请解释定时器事件异步/等待语法

标签 c# events asynchronous timer async-await

我研究了异步和等待语法 herehere .它确实有助于理解用法,但我在 MSDN 上找到了一个有趣的语法示例我只是不明白。

问题: 有人可以向我解释一下使用异步等待注册此 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 方法中没有出现这两个参数 sendere 有什么用?

最佳答案

它将异步 lambda 分配给 timerElapsed 事件。你可以这样理解异步lambda:首先,下面是一个lambda:

(sender, e) => HandleTimer()

此 lambda 同步调用 HandleTimer。然后我们添加一个 await 来异步调用 HandleTimer:

(sender, e) => await HandleTimer()

但这行不通,因为要异步调用某些东西,您自己必须是异步的,因此 async 关键字:

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

关于c# - 请解释定时器事件异步/等待语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37679480/

相关文章:

c# - ASP.NET 自定义模型绑定(bind) : DateTime

c# - 如何在 dll 项目中用 C++ 创建命名空间和构造函数?

java - Kafka 作为 future 事件的数据存储

C# 自定义事件始终为空

javascript - 当任何子元素单击新创建的元素时如何获取父元素的 ID

python - Python Asyncio队列获取未收到消息

Mathematica 中的异步计算

c# - 无法添加对项目的引用,Visual Studio

c++ - 游戏逻辑的异步屏幕更新,C++

c# - 使用C#检查音频是否在PC上正常工作?