C#等待挂起的IO操作

时间:2015-02-19 22:10:33

标签: c# io filesystemwatcher

给定一个目录,我怎么能等到它没有挂起的IO操作(带有可选的超时)。

  • 我可能正在复制,移动或删除许多文件。
  • 如果一个操作失败,则需要撤消。
  • 某些操作依赖于其他操作(E.G删除文件时, 创建备份目录,移动文件)

E.G

string targetParentDirectory = "C:\\mydir";
int timeOut = 500;

//Do many IO operations in targetParentDirectory

WaitForPendingOperations(targetParentDirectory, timeOut);

//Continue main thread

我猜每次操作都可以使用一个FileSystemWatcher。

  • 观察每个单独的操作非常慢。
  • 同时观看所有操作是有问题的 超时(启动每个线程,确保线程是 有效,有足够大的超时等待所有这些加上实际的文件操作...)

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

解决您描述的问题的简单方法:

  1. 聚合必须一起发生的文件系统操作,可以顺序执行(可能在失败时回滚),也可以独立完成到线程中。
  2. 每个线程按顺序处理执行项目,等待完成,以及任何必要的回滚(超时,以便它们不会永远等待)。
  3. 加入线程完成。
  4. 这是一个微不足道的变化(以及超出您已有的额外代码)。您可能无法执行许多文件操作。实际上,你只需要写一个"线程"或工人阶级。

    即使你有一个组合数量的不同可能的文件io序列,工作者构造函数也应该采用一个代表操作序列的对象,并能够根据需要调度它们。帮助解决这类问题属于另一个问题。