我正在构建一个Windows Service
以从表中读取记录,将记录数据传递到WCF Service
,等待其响应并根据来自数据库的响应更新数据库中的相同记录WCF Service
。这个过程将继续所有的记录,一旦所有的记录被处理,我需要延迟进一步执行代码n
分钟数。 n
分钟过后,我需要调用相同的代码再次从表中读取记录并处理它们,一旦处理了所有记录,再次延迟执行n
分钟数。这需要无限发生,最重要的一点是所有的执行都应该发生,包括延迟执行,我想完全避免使用Threading
或async/await
或任何其他异步编程技术。windows服务递归无限循环,延迟执行同步任务
寻找一段时间后,我已经了解到,与.NET Framework 4.5
,推荐的方法是使用Task.Delay()
方法不使用asycn/await
关键字同步增加的延迟。所以,我创建了具有无限循环recursive
方法的简单的控制台应用程序:
class Program
{
static void Main(string[] args)
{
RecursiveMethod();
}
public static void RecursiveMethod()
{
while (true)
{
DoWork();
Console.WriteLine("Task delayed...");
Task.Delay(3000).Wait();
Console.WriteLine("Calling method again recursively...");
RecursiveMethod();
}
}
public static void DoWork()
{
//Do some work
Console.WriteLine("Work Completed.");
}
}
上面的代码似乎工作正常,但在另一个窗口服务实现System.Timers.Timer
当我面临很大的问题,有两个正常运行后,天,Timer
完全停止工作,没有抛出任何异常,所以没有记录错误,这是非常令人沮丧的。
我想避免这种情况,那么对于简单的同步代码,实现Task.Delay()
的最佳方式是什么?延迟时间将设置为2
小时,因此我还想处理Task.Delay()
将从内存中收集垃圾或从内存中移除或停止工作(不抛出任何异常)并重新启动整个过程的情况。
这将产生一个堆栈溢出(一段时间后)。 –
@SirRufo任何其他替代我想要达到的目标? – seadrag0n
是的,阅读一些关于递归的教程来得到一个概念,为什么你不应该在这里使用它 –