gpt4 book ai didi

multithreading - 使用 System.Threading.Timer 连续 Azure WebJob

转载 作者:行者123 更新时间:2023-12-03 03:15:14 25 4
gpt4 key购买 nike

我正在尝试编写一个每 60 秒运行一次的连续 Azure WebJob,但不使用 Azure 调度程序服务,而是使用 System.Threading.Timer。在正式发布之前,我可以通过执行以下代码来完成此操作,但在恢复该项目并将所有 NuGet 包更新到最新版本后,该作业不再按给定的时间间隔运行。如果我注释计时器代码并手动调用“DoWork()”方法,则不会引发任何错误,因此这不是问题。

..
const int INTERVAL_SECONDS = 60;
..

static void Main()
{
JobHost host = new JobHost();
host.Call(typeof(Program).GetMethod("StartJob"));
host.RunAndBlock();
}

[NoAutomaticTrigger]
public static void StartJob()
{
int dueTime = (int)TimeSpan.FromSeconds(INTERVAL_SECONDS).TotalMilliseconds;
Timer timer = new Timer(o => DoWork(), null, dueTime, -1);
}

public static void DoWork()
{
// Do something every XX seconds
}

WebJobs 是否有我不知道的新变化?他们现在是否强制每个人都使用 Azure Scheduler 来执行此类任务,还是我遗漏了什么?

最佳答案

经过一番挖掘后,我发现 System.Threading.Timer 不是线程安全的(讽刺),我的假设是在 WebJobs 中引入异步支持之后,发生了一些变化SDK 在我使用的预览版本和 WebJobs SDK 的 GA 版本之间打破上述代码。

更改上述内容以使用 System.Timers.Timer 而不是 System.Threading.Timer 按预期工作:

var dueTime = TimeSpan.FromSeconds(INTERVAL_SECONDS).TotalMilliseconds;
var timer = new System.Timers.Timer(dueTime);
timer.Elapsed += (sender, e) => { DoWork(); };
timer.Start();

关于multithreading - 使用 System.Threading.Timer 连续 Azure WebJob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728701/

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