【发布时间】:2014-09-06 15:48:07
【问题描述】:
我有兴趣构建一个 c# 控制台应用程序,该应用程序将连接到 Twitter 的公共流 API 并将推文保存到 MSSQL 数据库。我想看看是否有人不介意确认我是否正确地处理了这个问题。
我设想流式 API 连接在其自己的线程上异步运行。当收到一条推文时,我想根据业务逻辑(附加线程)处理它并假定有效,将其添加到最终将持久保存到数据库并清除的推文队列(列表)中。这是应用程序的 3 个线程
- 后台工作人员监听流的新推文
- 后台工作人员根据业务逻辑处理推文并添加到推文队列
- 后台工作人员负责每隔 N 秒保存一次队列,然后清空队列
我相信 tweet-queue 变量需要是静态的和线程安全的。也许数据库连接和流对象也是如此?我很确定在访问时我必须锁定线程安全变量,我需要担心死锁吗?还有其他我遗漏的注意事项吗?
提前感谢您的帮助和见解
【问题讨论】:
-
我会为每一步使用一个队列。我怀疑您应该使用更多线程来收听 Twitter API,但我不知道。至少您应该将结果放入队列并重新开始收听。在下一个线程上,您可以进行评估并将其存储到数据库中。如果你真的需要,你仍然可以把它放在一个新的队列中并从另一个线程存储它。
-
感谢您的建议。使用 MS 的原生队列集合,我在添加/删除项目时是否仍需要手动锁定队列对象,还是由 MS 自动处理?
-
这个问题似乎是题外话,因为它应该在Programmers StackExchange
标签: c# database multithreading