2011-03-26 128 views
1

有人知道我将如何完成以下任务吗?我一直在玩C#中的线程池,我不觉得这会适合它。C#多线程概念问题

  1. 启动应用程序

  2. 检查新客户>客户端有项目,他们希望一些工作做了。

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

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

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

    1. 新客户
    2. 修改客户端。
    3. 没有变化。

其需要注意的是会有很多的客户,但他们的任务应该进行相当快的,但我不希望从一个客户的任务需要更长的时间来处理创造一个死锁。

在此先感谢!

+2

提高您的**收费**。 – 2011-03-26 04:28:45

+0

谢谢,我会牢记这一点。 – BlackTea 2011-03-26 19:33:28

+0

现在应该会更好。 – BlackTea 2011-03-28 00:41:33

回答

0

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

如果你不能这样做,你可以使用线程池或者一个windows服务。

Riana

+0

我同意我不喜欢根据EventResetArg。 – BlackTea 2011-03-29 15:38:38

0

我同意推模式在客户端发起的行动将更好地工作,从长远来看,这样的服务器只有当真正要做些什么,而不是不断地轮询工作全部客户端。

客户端可以将请求插入到队列中并由服务器处理它们。这样,您就可以控制服务器可以并行处理多少个请求,而不会对教师产生干扰。

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

GJ

+0

我如何解决这个问题,因为不得不重复步骤2-3并每隔xmin处理客户端任务。我认为BlockCollection是我昨晚看到的一个好主意。试图用一个简单的概念来解决它。 – BlackTea 2011-03-29 15:37:53

+0

我不会轮询客户端,而是客户端将工作放到队列中。然后服务器完成工作并通过回调将结果发回。你用什么通信,WCF? – gjvdkamp 2011-03-29 16:21:20

+0

我只是在.net 4.0中执行它,现在是一个命令提示符,但它最终将作为服务运行。 – BlackTea 2011-03-31 06:03:12