Pra*_*bhu 9 .net c# asynchronous windows-services async-await
我在Windows服务中有一个计时器,并且在timer_Elapsed事件处理程序中调用了异步方法:
protected override void OnStart(string[] args)
{
timer.Start();
}
private async void timer_Elapsed(object sender, ElapsedEventArgs e)
{
_timer.Stop();
await DoSomething();
_timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码好吗?首先,我读过async void不是一个好主意.其次,为什么我需要timer_Elapsed方法首先异步?它不像我们将由多个调用者并行调用的已用事件处理程序.但是,如果我不使方法异步,那么我的逻辑将会中断,因为计时器将在DoSomething完成之前启动.
那么,正确的方法是使timer_Elapsed异步吗?
Ste*_*ary 12
应该避免异步空白; 它应该只用于事件处理程序.Timer.Elapsed是一个事件处理程序.所以,这不一定是错的.
该timer_Elapsed方法必须是async因为它包含一个await.这是关键字的工作方式:async将方法重写为异步状态机,启用await关键字.
| 归档时间: |
|
| 查看次数: |
6122 次 |
| 最近记录: |