【发布时间】:2009-03-19 07:24:48
【问题描述】:
我有一个监视目录更改的服务应用程序。
服务应用程序将密切监视目录。它是这样做的:
- 睡眠 X 分钟
- 扫描目录,看看是否有新添加
- 每次添加启动一个线程
- 重复 1-3
它所做的一件事是将记录插入数据库。现在,由于可以同时运行多个线程,完全有可能两个线程同时插入记录。
我想避免这种同时插入;相反,我希望这些插入排队,这意味着只有 1 个线程可以在单个时间点访问数据库。当区域已经有1个线程访问数据库时,其他服务无法访问数据库。
我想要这个的原因是因为在电涌的情况下,我只丢失了一个交易而不是很多。
我正在考虑使用锁定数据库事务的 lock 语句。这是最好的方法吗?
P/S:我正在编写一个与 MySQL 数据库对话的 .Net 服务。
【问题讨论】:
-
为什么在文件更改时启动服务?为什么不让服务使用 FileSystemWatcher 监视目录= 如果它真的是一个服务,它应该在后台执行并在发生某些事情时唤醒。然后你可以控制平行插入到你心中的愿望......
-
我编辑问题以使其更清晰。
标签: database-design windows-services