System.Timers.Timer 的 Elapsed 回调可以是异步的吗?

2024-04-27

是否有可能(甚至合理)进行回调System.Timers.Timer异步方法?就像是:

var timer = new System.Timers.Timer
{
   Interval = TimeSpan.FromSeconds(30).TotalMilliseconds,
   AutoReset = true
};
timer.Elapsed += async (sender, e) => { /* await something */ };
timer.Start();

它可以编译(显然是一个很好的起点),但我不确定我是否理解其后果。定时器会吗await重置计时器之前的回调?


定时器会吗await重置计时器之前的回调?

不,没什么could等待,因为签名ElapsedEventHandler https://msdn.microsoft.com/en-us/library/system.timers.elapsedeventhandler有一个 void 返回类型。

换句话说,您的代码相当于:

var timer = new System.Timers.Timer { ... };
timer.Elapsed += Foo;
timer.Start();

...
private async void Foo()
{
    ...
}

您是否可以接受这取决于您的背景。一般来说,使用 async void 方法或匿名函数会使它们更难测试和重用 - 但这种能力正是为了事件处理程序而给出的......不过,您应该考虑如何传播错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.Timers.Timer 的 Elapsed 回调可以是异步的吗? 的相关文章

随机推荐