【发布时间】:2022-11-19 01:08:56
【问题描述】:
我有一个带有等待数据库操作的异步回调的 Windows 窗体计时器,为什么在前一个回调尚未完成之前再次执行等待?我怎样才能解决这个问题? 许多人说 System.Windows.Forms.Timer 在执行新的回调操作之前等待前一个回调操作完成。
Private Async Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
' I have an array with 6 elements that i control
' for executing database operation
For i=1 To 6
If(some condition is true in array index)
Await SaveAsync()
'set to false the condition in array index after save
End If
Next
End Sub
提前致谢。
【问题讨论】:
-
SaveAsync是做什么的?如果太慢,计时器将在SaveAsync有机会完成之前再次触发 -
@PanagiotisKanavos 最好不要在计时器中使用 async await 还是有另一种方法来纠正这个问题?
-
没关系。定时器无论如何都会触发。
SaveAsync是做什么的?定时器多久触发一次? -
每秒向数据库中插入数据。
-
@Craig 我读到 System.Windows.Forms.Timer 是唯一一个在开始新的之前完成前一个滴答声的计时器,我认为即使使用异步等待也能工作,但我错了,所以我创建了一个任务变量来保存任务等待并在下一行中我确实等待任务,并且我在每个计时器滴答中控制任务状态以验证他的状态直到完成。
标签: vb.net winforms async-await