[C#设计模式,用于多个线程的定期执行

问题描述 投票:2回答:1

我在C#Windows服务中具有以下要求。

  1. 在服务启动时,它将从数据库获取数据的集合。并将其保存在内存中。
  2. 具有要从3个不同线程中定期执行的业务逻辑。
  3. 每个线程将对步骤1中提到的数据收集中的不同数据子集执行相同的业务逻辑。每个线程将产生不同的结果集。
  4. 如果数据收集发生任何更改,所有3个线程将定期运行。

[当任何客户端调用该服务时,该服务应该能够返回线程执行的状态。

我知道C#具有实现定期线程执行的不同机制。计时器,带有睡眠的线程,事件eventwaithandle等。我试图了解哪种线程机制或设计模式最适合此要求?

c# multithreading design-patterns thread-synchronization periodic-processing
1个回答
0
投票

最简单的解决方案是以Task Method()样式定义调度的逻辑,并使用Task.Run()执行它们,而在主线程中,只需等待使用Task.WaitAny()完成执行即可。如果任务完成,则可以再次调用Task.WaitAny,但是要传递Task.Delay(timeUntilNextSchedule)而不是完成的任务。这样,任务就不会阻塞主线程,并且可以避免为了等待而旋转CPU。通常,您可以避免直接在现代.NET中进行管理]

取决于其他要求,例如标准化错误处理,监视功能,这些计划任务的管理,您还可以依赖更强大的解决方案,例如HangFire

© www.soinside.com 2019 - 2024. All rights reserved.