Ver código fonte

增加selectAsync函数重载

懒得勤快 3 anos atrás
pai
commit
7dcf93647c

+ 55 - 0
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -450,6 +450,61 @@ namespace Masuit.Tools
             return Task.WhenAll(source.Select(selector));
         }
 
+        /// <summary>
+        /// 异步Select
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="selector"></param>
+        /// <param name="maxParallelCount">最大并行数</param>
+        /// <returns></returns>
+        public static async Task<List<TResult>> SelectAsync<T, TResult>(this IEnumerable<T> source, Func<T, Task<TResult>> selector, int maxParallelCount)
+        {
+            var results = new List<TResult>();
+            var tasks = new List<Task<TResult>>();
+            foreach (var item in source)
+            {
+                var task = selector(item);
+                tasks.Add(task);
+                if (tasks.Count >= maxParallelCount)
+                {
+                    results.AddRange(await Task.WhenAll(tasks));
+                    tasks.Clear();
+                }
+            }
+
+            return results;
+        }
+
+        /// <summary>
+        /// 异步Select
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="selector"></param>
+        /// <param name="maxParallelCount">最大并行数</param>
+        /// <returns></returns>
+        public static async Task<List<TResult>> SelectAsync<T, TResult>(this IEnumerable<T> source, Func<T, int, Task<TResult>> selector, int maxParallelCount)
+        {
+            var results = new List<TResult>();
+            var tasks = new List<Task<TResult>>();
+            int index = 0;
+            foreach (var item in source)
+            {
+                var task = selector(item, index++);
+                tasks.Add(task);
+                if (tasks.Count >= maxParallelCount)
+                {
+                    results.AddRange(await Task.WhenAll(tasks));
+                    tasks.Clear();
+                }
+            }
+
+            return results;
+        }
+
         /// <summary>
         /// 异步For
         /// </summary>

+ 1 - 1
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -4,7 +4,7 @@
     <LangVersion>latest</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.9</Version>
+    <Version>2.4.9.1</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
     <Copyright>懒得勤快,长空X</Copyright>

+ 1 - 1
Masuit.Tools.AspNetCore/Masuit.Tools.AspNetCore.csproj

@@ -18,7 +18,7 @@
         <LangVersion>latest</LangVersion>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>1.0.6</Version>
+        <Version>1.0.6.1</Version>
         <FileVersion>1.0</FileVersion>
         <Company>masuit.com</Company>
         <AssemblyVersion>1.0</AssemblyVersion>

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -18,7 +18,7 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.9</Version>
+        <Version>2.4.9.1</Version>
         <FileVersion>2.4.5.6</FileVersion>
         <Company>masuit.com</Company>
         <AssemblyVersion>2.4.5.6</AssemblyVersion>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net45</id>
     <!--*-->
-    <version>2.4.9</version>
+    <version>2.4.9.1</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.9</version>
+    <version>2.4.9.1</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>