BatchTask.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using HTEXLib.COMM.Helpers;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace TEAMModelOS.SDK
  8. {
  9. public static class BatchTask
  10. {
  11. public static async Task<T[]> TaskPage<T>(this List<Task<T>> tasks,int pagesize) {
  12. if (tasks.IsNotEmpty())
  13. {
  14. if (tasks.Count <= pagesize)
  15. {
  16. return await Task.WhenAll(tasks);
  17. }
  18. else
  19. {
  20. List<T> ts = new List<T>();
  21. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  22. for (int i = 0; i < pages; i++)
  23. {
  24. var lists = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  25. ts.AddRange(await Task.WhenAll(lists));
  26. }
  27. return ts.ToArray();
  28. }
  29. }
  30. else {
  31. return null;
  32. }
  33. }
  34. public static async Task TaskPage(this List<Task> tasks, int pagesize)
  35. {
  36. if (tasks.IsNotEmpty())
  37. {
  38. if (tasks.Count <= pagesize)
  39. {
  40. await Task.WhenAll(tasks);
  41. }
  42. else
  43. {
  44. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  45. for (int i = 0; i < pages; i++)
  46. {
  47. var lists = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  48. await Task.WhenAll(lists);
  49. }
  50. }
  51. }
  52. }
  53. public static List<IEnumerable<T>> Page<T>(this IEnumerable<T> tasks, int pagesize)
  54. {
  55. if (tasks != null && tasks.Any())
  56. {
  57. if (tasks.Count() <= pagesize)
  58. {
  59. return new List<IEnumerable<T>> { tasks };
  60. }
  61. else
  62. {
  63. List<IEnumerable<T>> ts = new List<IEnumerable<T>>();
  64. int pages = (tasks.Count() + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  65. for (int i = 0; i < pages; i++)
  66. {
  67. var lists = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  68. ts.Add(lists);
  69. }
  70. return ts;
  71. }
  72. }
  73. else
  74. {
  75. return new List<IEnumerable<T>> ();
  76. }
  77. }
  78. }
  79. }