是否有可能(甚至合理)进行回调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(使用前将#替换为@)