Foreach 或 Parallel Foreach 中的所有元素在 C 中启动任务时不会循环#


var seldir = new DirectoryInfo(path);
Parallel.ForEach(seldir.EnumerateFiles(), files =>
{
if (files.Extension.Equals(".txt"))
{
Task text = Task.Factory.StartNew(() => opentext(files.Name));
}
else if (files.Extension.Equals(".doc"))
{
Task doc = Task.Factory.StartNew(() => opendoc(files.Name));
}
});

一旦代码找到一个文本文件,它就会启动任务以在if条件下调用另一个函数,稍后无论枚举的文件,即使找到.doc扩展文件,代码也不会到达elseif部分。我需要打开文件夹中找到的所有文本和文档文件。请帮忙。

与其进行所有这些单独的后台调用,不如将所有逻辑提取到单个后台方法中要简单得多。

public async void OpenFiles_Click(object sender, EventArgs e)
{
await Task.Run( OpenFiles );
}

async Task OpenFiles()
{
var seldir = new DirectoryInfo(path);
var extensions = new string[] { ".txt", ".doc" };
var files = seldir.EnumerateFiles().Where( x => extensions.Any( y => x.Extension == y));
foreach (var f in files) opentext(f.Name);
}

最新更新