在哪里可以找到演示轮询的优秀 C# 控制台应用程序?

Posted

技术标签:

【中文标题】在哪里可以找到演示轮询的优秀 C# 控制台应用程序?【英文标题】:Where can I find a good C# console app that demonstrates polling? 【发布时间】:2011-06-03 17:02:01 【问题描述】:

我正在寻找一个用 C# 进行轮询的好例子。

基本上,每 X 秒读取一次仪器,并将值记录到文本文件中。我正在寻找一个使用 .NET 4 的并行库的示例。或者,也许我通过查看 TPL 来过度考虑这个解决方案......

ps- 这个问题与我之前关于数据库轮询的问题无关。

【问题讨论】:

【参考方案1】:

我不确定我是否会特别在意 TPL。只需使用System.Threading.TimerSystem.Timers.Timer 定期执行操作。它们都将使用线程池 - 在此期间您打算在主控制台线程中做什么?

当然,另一个非常简单的选择是让主线程在轮询发生之间休眠。这很粗糙,但如果这是您的应用程序需要做的全部,那么它对您来说可能已经足够好了。我不确定如果系统时钟发生变化它会如何表现,请注意......这是用于生产使用的非常长时间运行的任务,还是只是一个快速工具? (如果它是一个长时间运行的应用程序,您可能需要考虑改用 Windows 服务。)

【讨论】:

这将用于长期运行的生产用途,我正在考虑使用 Windows 服务。我们现在正在制作原型,看看所有部分是如何组合在一起的。除非我们找到令人信服的理由将其保留为控制台应用程序,否则此组件可能最终会成为一项服务。 @SpecialAgent_W436:在那种情况下,我可能会选择其中一个计时器类。两者都非常易于使用。【参考方案2】:

创建计时器真的很容易:

static void Main(string[] args)

    // Create a timer that polls once every 5 seconds
    var timer = new System.Threading.Timer(TimerProc, null, 5000, 5000);
    Console.WriteLine("Polling every 5 seconds.");
    Console.WriteLine("Press Enter when done:");
    Console.ReadLine();
    timer.Dispose();


static int TickCount = 0;
static void TimerProc(object state)

    ++TickCount;
    Console.WriteLine("tick 0", TickCount);

请注意,TimerProc 是在单独的线程上调用的。您的主程序可以做其他事情,这将继续每五秒轮询一次,直到您终止(或修改)计时器。

我更喜欢System.Threading.Timer 而不是System.Timers.Timer,因为后者会吞下异常。如果您的 elapsed 事件处理程序中存在引发异常的错误,您将永远不会知道它,因为System.Timers.Timer 事件处理程序将抑制该异常。因此,我强烈建议您不要使用它。请改用System.Threading.Timer

【讨论】:

【参考方案3】:

对我来说,使用 PL 来完成这项任务并不正确。我建议查看System.Timer,您可以使用它指定在应用程序中引发 Elapsed 事件的重复间隔,从而允许您处理事件以执行常规处理。

【讨论】:

以上是关于在哪里可以找到演示轮询的优秀 C# 控制台应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

在c#中轮询一个url

Nginx学习系列之轮询的负载均衡及Ip_hash等常用指令介绍

Spring Web 应用程序中带有 Ajax 轮询的会话超时

Haskell:在不轮询的情况下监控文件(在 linux 中使用 inotify)

如何在不轮询的情况下监视页面的更改?

在 asp.net 中调用需要轮询的 Web 服务的最佳编码模式是啥?