C# 如何在C语言中并行处理任务队列#

C# 如何在C语言中并行处理任务队列#,c#,multithreading,parallel-processing,C#,Multithreading,Parallel Processing,我有一些文件需要上传到某个地方进行处理。文件路径位于数据库表中 在顺序编程中,我获取20个(可能是n个)文件,上传这些文件进行处理,删除这些文件,然后处理下一个20个文件的插槽 但我需要的是并行上传这些文件,就像在C#(Parallel.For等)中使用TPL并行执行任务一样。这在第三方物流中很容易实现,但我必须等待所有的任务 例如,在我的任务队列中,我有20个文件,该队列中的19个文件大小为1MB,但有一个文件大小为500MB 因此,当我在此队列上使用Parallel.For时,多个线程开始上

我有一些文件需要上传到某个地方进行处理。文件路径位于数据库表中

在顺序编程中,我获取20个(可能是n个)文件,上传这些文件进行处理,删除这些文件,然后处理下一个20个文件的插槽

但我需要的是并行上传这些文件,就像在C#(Parallel.For等)中使用TPL并行执行任务一样。这在第三方物流中很容易实现,但我必须等待所有的任务

例如,在我的任务队列中,我有20个文件,该队列中的19个文件大小为1MB,但有一个文件大小为500MB

因此,当我在此队列上使用Parallel.For时,多个线程开始上载这些文件。在这种情况下,大小较小的19个文件将更快上载,但大小较大的1个文件将需要时间


因此,我需要的是,在处理较大的文件时,我可以在队列中输入19个其他文件,并开始与该大文件并行处理它们。

您可以通过使用
parallel.For
parallel.ForEach
的重载来执行此操作,该重载接受
ParallelOptions
类型的参数

例如(使用
ForEach
):

其中,
files
是文件名列表,
process
声明如下:

private static void process(string file)
{
    ...

这会将
ForEach
限制为
MaxDegreeOfParallelism
(在本例中为20)个并发线程,并且一旦完成,它将调度一个新的线程,直到它没有要调度的项为止。

您确实应该签出,因为它非常适合您的需求。您确定需要并行上载它们吗,而不是异步?
private static void process(string file)
{
    ...