找不到任务内创建的目录和文件

时间:2016-05-18 08:09:22

标签: c# .net file task-parallel-library

var tasks = new List<Task>();
var path=@"D:\path";

for(int i=0;i<8;i++)
{
    var task = Task.Factory.StartNew(() => {
    DataSet dataset;

    //Some xml work to fill dataset...

    if(!Directory.Exists(path))
        Directory.Create(path);

    dataset.WriteXml(Path.Combine(path, "filename.xml");

    });
    tasks.Add(task);

}

while(tasks.Count>0)
{
    int i = Task.WaitAny(tasks.ToArray());
    tasks.RemoveAt(i);

    string[] files;
    files = Directory.GetFiles(path);
}

我们正在尝试在完成其工作后获取每个任务的文件。但问题是,当代码进入 Directory.GetFiles()方法时,它无法找到相关路径(引发 DirectoryNotFound 异常)。但是当我们手动查看路径时,会有一个包含xml文件的文件夹。有时代码可以找到目录,但即使文件夹中有文件,也不会返回任何文件。这种情况一直持续到任务计数为零。

我也尝试了 Task.ContinueWith ,但仍未解决。它看起来像同步问题,因为虽然debuging代码正常工作。是否有可能 Task.WaitAny 不等待任务完成?

我们正在使用.NET 4.0。

1 个答案:

答案 0 :(得分:0)

你错过了路径中的反斜杠,所以在连接时你正在写

@"D:\path" + "filename.xml"

@"D:\pathfilename.xml"

而不是

@"D:\path\filename.xml"

与任务无关:)