我的团队正在编写一个需要从第三方系统轮询数据的Windows服务(第三方系统提供我们使用的Web服务)。
这个过程看起来像这样:
1.致电第三方WS
2.将收到的原始数据保存到我们的数据库中
3.处理原始数据
4.将处理后的数据保存到数据库中
5.重复
团队同意我们实际上有两种不同的逻辑操作:
1.获取和保存原始数据
2.处理原始数据并保存结果
我们正在尝试确定以下哪种设计方案更好:
选项1:在同一个Windows服务上执行两个操作,每个操作都在它自己的线程上
选项2:对Windows服务执行第一个操作,并为第二个操作执行async / one-way调用wcf服务
在您看来,哪个选项更好?
如果您有其他选择,您认为更好,请分享。
感谢。
答案 0 :(得分:2)
这取决于。
鉴于您有一个明显顺序的进程,为什么要使用单独的线程来读取然后处理数据?最简单的方法是单个线程循环读取,处理它,并且可能在某个时刻等待,因此您不受第三方的限制。
但是,如果处理需要很长时间,您可能希望在单个轮询线程和处理数据的一组工作线程之间拆分工作。
最简单的选项通常是初始实施的正确选项。在您需要之前添加线程和WCF服务调用很少是正确的事情。
为了给出更好的答案,您确实需要提供更多信息:第三方服务是否限制您可以一次拨打多少电话或者制作速度有多快,处理需要多长时间,您需要多长时间民意调查,......
答案 1 :(得分:1)
根据你的评论,我会说你有一个线程,每秒轮询第三方服务并开始两个任务。
任务1会将原始数据存储到数据库中。 任务2将处理原始数据并将结果存储在数据库中。
如果轮询线程检索1000个条目,它应该立即再次轮询。
您可以使用System.Threading.ThreadPool或System.Threading.Tasks.Task。