-1

我有这个系统,有两个应用程序 A 和 B。有多个 B 实例正在运行。应用程序 A 和 B 不直接相互通信。他们共享同一个文件夹。

应用程序 A 将一个文件复制到一个文件夹,应用程序 B 的实例将该文件复制到它自己的临时文件夹并开始处理。这里的问题是:应用程序 B 有许多实例。可能发生的情况是,并非应用程序 B 的所有实例都没有将文件复制到自己的临时文件夹中,而应用程序 A 正在复制一个新文件以覆盖以前的文件一。

应用程序 A 和 B 是用 C# 编写的。由于应用程序 A 不知道 B 运行了多少个实例,因此我遇到了阻止 A 启动复制过程的问题,而 B 的其他实例仍需要将文件复制到其临时文件夹。

4

1 回答 1

0

A不应该覆盖它生成的任何以前的文件 - 它不知道是否有更多的实例B想要处理该文件。相反,A需要在输出文件夹中创建新文件,因为它产生输出 - 一种好的方法是使用时间戳作为文件名的一部分,以便可以轻松地按日期对多个文件进行排序(文件创建日期也可以用于该目的)。

的实例B应该使用一个共享文件(MySql 数据库等)来跟踪B使用给定文件的实例。应使用互斥锁/信号量同步访问此共享文件(如果访问尚未同步)。当所有B实例都处理完一个文件后,最后一个实例可以删除不再需要的输入文件。如何做到这一点取决于B.

请记住,这只是一个想法——这是一个相对复杂的问题,有几种方法可以解决它。

于 2013-05-11T03:15:21.353 回答