【问题标题】:c# console app using threadc#控制台应用程序使用线程
【发布时间】:2011-09-20 10:49:53
【问题描述】:

我有一个控制台应用程序。我需要实现一个无限循环的 do while 和一个每 3 秒从页面返回项目列表的线程。我怎样才能做到这一点?我有一个叫做 getId(string URL) 的方法。如何在do while中实现线程?

【问题讨论】:

  • 你问的是如何创建线程?

标签: c# multithreading thread-safety console-application


【解决方案1】:

使用System.Timers.Timer 类:

string url = "www";            
System.Timers.Timer timer = new System.Timers.Timer(3000);
timer.Elapsed += (o, e) => this.GetId(url);
timer.Start();

Timer 设计用于与工作线程一起使用 多线程环境。服务器计时器可以在线程之间移动到 处理引发的 Elapsed 事件,从而获得比 Windows 计时器按时引发事件。

Timer 组件根据以下值引发 Elapsed 事件 区间属性

【讨论】:

    【解决方案2】:

    我不会使用计时器 - 如果项目检索时间超过三秒会发生什么?

    你能忍受 sleep(3000) 循环吗?

    Rgds, 马丁

    【讨论】:

    • 我相信您提到的案例是设计问题,而不是特定于计时器的问题。如果这种情况是真实的 - 显然解决方案会更复杂,而不是简单的timer.Elapsed +=... and timer.Start()。对于这种情况,使用 Thread.Sleep + 某种同步句柄(如 AutoReset/ManualReset 事件)运行单独的线程是有意义的
    • @sil - 是的,如果 3 秒是锁,这是一种解决方案,这就是为什么我问这个问题“你能忍受 sleep(3000) 循环吗?”。如果不是,那么更简单的解决方案是在尝试检索之前存储滴答计数,在检索之后从滴答计数中减去它,并将此值用于 sleep() 参数。这将每 3 秒进行一次检索,除非检索时间超过 3 秒,在这种情况下,下一次检索将在最后一次之后立即开始 - 不需要额外的线程、计时器、同步等(考虑滴答滚动)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多