具有lambda表达式的多线程目录.getfiles

时间:2015-02-26 07:55:02

标签: c# multithreading lambda

  1. 我在c #windows服务中有两个线程,时间流逝
  2. 当时间触发时,线程同时启动以从同一文件夹上的网络服务器获取文件
  3. 与thread1和thread2的唯一区别是文件大小,thread1接受任何小于10mb的文件,thread2大于5mb。
  4. 所以我的问题是,使用Directory.GetFilesDirectory.EnumerateFiles会与未找到的异常文件发生冲突,因为我在日志中看到错误了吗?
  5. thread1:

    foreach (var file in
        Directory
            .EnumerateFiles(serverConfig["stagingFolder"])
            .Select(s => new FileInfo(s))
            .Where(s =>
                !s.Name.StartsWith(".")
                && !s.Name.EndsWith(".tmp")
                && !s.Name.EndsWith(".stdf.gz")
                && s.Length < size))
    

    thread2

    foreach (string file in
        Directory
            .EnumerateFiles(serverConfig["stagingFolder"], "*", SearchOption.TopDirectoryOnly)
            .Where(s =>
                !new FileInfo(s).Name.StartsWith(".")
                && !s.EndsWith(".tmp")
                && !s.EndsWith(".stdf.gz")
                && new FileInfo(s.ToString()).Length > size))
    

1 个答案:

答案 0 :(得分:0)

根据docs,EnumerateFiles不会因FileNotFound异常而失败。所以它是构建FileInfo对象的另一部分。您是否尝试过打印路径和CWD,以便验证是否存在完整路径?也许您需要将文件称为new FileInfo(serverConfig["stagingFolder"] + Path.PathSeparator + s)

要回答您的其他问题,EnumerateFiles应该是线程安全的。文档没有明确说明,但没有理由假设EnumerateFiles函数调用彼此共享隐藏状态。