【问题标题】:How to implement threading timer and thread pool to process message every second on C#如何在 C# 上实现线程计时器和线程池以每秒处理消息
【发布时间】:2012-09-18 18:39:14
【问题描述】:

我想开发 c# windows 应用程序,它每秒处理来自“收件箱”表的消息,然后处理它而不等待每个进程的结果。我一直在阅读 .net 中的多线程,但我仍然没有最好的方法来实现。执行这些要求的最佳方法是什么??

  1. 我是否已经运行线程计时器然后执行线程池?
  2. 或者我只使用线程定时器?

请就我应该实施的最佳方法给出您的意见和示例。

谢谢

【问题讨论】:

  • 是否必须以相当高的准确度“每一秒”?您的系统可以容忍多少“滞后”?处理一条消息需要多长时间?什么是“收件箱表”——它是数据库表吗?

标签: c# .net multithreading timer threadpool


【解决方案1】:

有两种简单的方法。数字 2 更简单,但如果您在 UI 线程上做大量工作,数字 1 更有可能准时。您也可以试试Reactive Extensions 库,它更酷。

1) 默认情况下,System.Timers.Timer 将在线程池线程上引发 ellapsed 事件,这可能是合适的,但如果您使用的数据由发送消息循环的线程修改,则需要注意竞争条件.如果需要将数据推送回 UI 线程,则需要对其进行安排。

2) 使用在消息循环之外运行的计时器,例如DispatcherTimer,然后使用BackgroundWorkerTask Parallel Library 在另一个线程上执行工作。它们具有帮助您将结果编组回 UI 线程的机制。

您还需要注意,在完成处理上一个计时器事件的工作之前,计时器不会结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多