BatchTask.cs 2.7 KB

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