0

我的团队正在编写一个 Windows 服务,该服务需要轮询来自 3rd 方系统的数据(3rd 方系统提供了我们使用的 Web 服务)。
该过程将如下所示:
1. 调用第 3 方 WS
2. 将收到的原始数据保存到我们的 DB
3. 处理原始数据
4. 将处理后的数据保存到我们的 DB
5. 重复

团队同意我们实际上有 2 种不同的逻辑操作:
1. 获取和保存原始数据
2. 处理原始数据并保存结果

我们正在尝试确定以下哪个设计选项更好:
选项 1:在同一个 windows 服务上执行两个操作,每个操作在它自己的线程上
选项 2:在 windows 服务上执行第一个操作,以及异步/单向为第二个操作调用 wcf 服务

在您看来,哪个选项更好?
如果您有其他您认为更好的选择,请分享。

谢谢。

4

2 回答 2

2

这取决于。

鉴于您有一个明显的顺序进程,为什么要使用单独的线程来读取然后处理数据?最简单的方法是一个循环读取、处理它并可能在某个时间点等待的单个线程,这样您就不会受到第三方的速率限制。

但是,如果处理需要很长时间,您可能希望在单个轮询线程和一组处理数据的工作人员之间拆分工作。

最简单的选项通常是您初始实施的正确选项。在需要之前添加线程和 WCF 服务调用很少是正确的做法。

为了提供更好的答案,您确实需要提供更多信息:第三方服务是否限制您一次可以拨打多少电话或拨打电话的速度,处理需要多长时间,您需要多久轮询一次, ...

于 2012-07-15T16:40:59.420 回答
1

根据您的评论,我会说您有一个线程,该线程每秒轮询 3rd 方服务并启动两个任务。

任务 1 将原始数据存储到数据库。任务 2 将处理原始数据并将结果存储在数据库中。

如果轮询线程检索到 1000 个条目,它应该立即再次轮询。

您可以使用 System.Threading.ThreadPool 或 System.Threading.Tasks.Task。

于 2012-07-15T18:26:50.657 回答