C#多线程概念问题

时间:2011-03-26 04:22:42

标签: c# .net multithreading thread-safety

有人知道我将如何完成下面的任务吗?我一直在使用C#中的线程池,我觉得这不适合它。

  1. 启动应用程序

  2. 检查新客户>客户有他们想要完成一些工作的项目。

  3. 在执行任务之前解析客户端请求。现在应排队等待检查。

  4. 每个检查每个客户端(时间间隔示例:30秒)>执行任务。

  5. 与此同时,我必须重复步骤2-3,因为我期待:

    1. 新客户
    2. 修改后的客户。
    3. 没有变化。
  6. 重要的是要注意会有很多客户端,但他们的任务应该执行得相当快,但是,我不希望从一个客户端任务创建死锁需要更长的时间来处理。

    提前致谢!

2 个答案:

答案 0 :(得分:0)

不是像你一样使用“拉”模型,而是不可能使用“推”模型吗?也就是说,使用事件而不是每隔x秒检查一次客户端状态。

如果您不能这样做,您可以使用线程池或Windows服务。

Riana

答案 1 :(得分:0)

我同意客户端启动操作的推送模型从长远来看会更好地工作,这样服务器只有在实际有事情要做而不是连续轮询所有客户端时才能工作。

客户端可以将请求插入队列,服务器可以处理它们。这样,您可以控制服务器可以并行处理的请求数量,而不会干扰教学。

BlockingCollection是.Net 4中引入的一个新类,专门为此类工作而设计。 This是一篇关于如何使用它的非常好的文章。如果您是.Net并行编码的新手,您可能希望阅读整个系列,非常好读。

GJ