场景:实际开发中对接的第三方接口比较慢导致循环处理时任务堆积堵塞,这个时候需要分赛道并行处理来提一提速


-- 列出指定目录下及所其有子目录及子目录里更深层目录里的文件(需要递归)

public static void TranslationAllFiles(string from, string to, string path)

{

            DirectoryInfo dir = new DirectoryInfo(path);


            /* 找到该目录下的文件 */

            FileInfo[] files = dir.GetFiles();


            /* 如果需要限制同时进行的线程数 */

           TaskScheduler scheduler = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Current, 20).ConcurrentScheduler;


           TaskFactory fac = new TaskFactory(scheduler);


            List<Task> tasks = new List<Task>();

            foreach (var file in files)

            {

                if (file.Extension.ToLower() == ".json")

                {

                    tasks.Add(fac.StartNew(() =>

                    {

                        TranslationByJsonFile(from, to, file);

                    }));

                }

                else if (file.Extension.ToLower() == ".resx")

                {

                    tasks.Add(fac.StartNew(() =>

                    {

                        TranslationByResxFile(from, to, file);

                    }));

                }

            }

            /* 等待所有的任务都处理完再接着往下走 */

            Task.WaitAll(tasks.ToArray());



            /* 找到该目录下的所有目录再递归 */

            DirectoryInfo[] subDir = dir.GetDirectories();


            foreach (DirectoryInfo d in subDir)

            {

                TranslationAllFiles(from, to, d.FullName);

            }

}