gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:47:23 26 4
gpt4 key购买 nike

是否有可能(甚至合理)使 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();

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

最佳答案

Will the timer await the callback before resetting the timer?

没有。它可以等待什么,因为 ElapsedEventHandler 的签名具有 void 返回类型。

换句话说,您的代码等同于:

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

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

您是否可以接受这取决于您的背景。通常,使用异步 void 方法或匿名函数会使它们更难测试和重用 - 但这种能力正是为了事件处理程序而提供的......你应该考虑如何传播错误。

关于c# - System.Timers.Timer 的 Elapsed 回调可以是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com