首页 > 解决方案 > Threading.Task.Run 提交两次但仅在某些调用上

问题描述

朋友:这个问题让我很困惑。

此代码两次提交相同的作业,除非我记录它!

' optionally log to a textfile before call
If bLog Then LogProcess("Before run")

' this only processes once regardless of 
ExecuteSQL($"UPDATE [Process] SET [timesRepeated] += 1, [dateStarted] = '{Now}' WHERE [id] = {iID}")

Dim oBackground As New Background

' this thing spawns two of the some - but not all - jobs!
Dim t1 As Task = Task.Run(Sub() CallByName(oBackground, sProcessKey, CallType.Method, iID))

' optionally log to a textfile following call
If bLog Then LogProcess("After run")

这作为由内部计时器调用的后台处理例程的一部分发生。

我已经验证了计时器只产生一次,并且每次“heatbeat”只触发一次。

如果使用 bLog = True 调用此例程,我会执行单次执行。如果 bLog = False,某些进程 (sProcessKey) 会同时被调用两次。我也登录了这些例程。

有什么想法吗?

提前致谢。

标签: processbackgroundtaskcallbyname

解决方案


我希望这对其他人有帮助。这不是解决方案,只是一种解决方法:

由于稍微延迟处理(在这种情况下通过日志记录)起作用,我添加了一个贪睡因素,因此:

If bLog Then 
   LogProcess("After run")
Else
   Thread.Sleep(1000)
End If

这解决了这个问题,但很明显,处理延迟了 1 秒。


推荐阅读