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。
答案 0 :(得分:0)
你错过了路径中的反斜杠,所以在连接时你正在写
@"D:\path" + "filename.xml"
是
@"D:\pathfilename.xml"
而不是
@"D:\path\filename.xml"
与任务无关:)