我有以下问题。假设我有一个字符串列表实际上是xls excel文件的URL,我试图将它们全部下载并将它们转换为xlsx,因为我使用的是Microsoft兼容包,我不能在下载后使用转换器文件,因为我不希望一次运行多个进程,并且大约有1600个文件,所以我真的不希望那么多进程按顺序执行它可能会永远持续下去。
我试图通过使用TPL数据流来改进我的代码,因为我认为这种情况非常适合生产者 - 消费者一样的模式,并且互联网提示TPL数据流是我需要的,但可能我误解了教程中的一些东西我是阅读,因为以下代码不起作用。我究竟做错了什么 ?
var pathsBuffer = new BufferBlock<string>(new DataflowBlockOptions
{
BoundedCapacity = 12
});
var converterOptions = new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 4
};
var converter = new ActionBlock<string>((filePath) =>
{
Process.Start(@"c:\Program Files (x86)\Microsoft Office\Office12\excelcnv.exe",
string.Format(@" -nme -oice {0} {1}", filePath, filePath + "x")).WaitForExit();
}, converterOptions);
pathsBuffer.LinkTo(converter);
pathsBuffer.Completion.ContinueWith(task => converter.Complete());
Parallel.ForEach(FileAdress, async(file) =>
{
using(var webClient = new WebClient())
{
string OutputDirectory = ConfigurationManager.AppSettings["RootDirectory"] +
FolderIndex;
if (!Directory.Exists(OutputDirectory))
{
Directory.CreateDirectory(OutputDirectory);
}
string filePath = Path.Combine(OutputDirectory, AdressIndex[file]);
await webClient.DownloadFileTaskAsync(new Uri(file), filePath);
while (!pathsBuffer.Post(filePath)) {}
}
});
pathsBuffer.Complete();