Skip to content

Commit a8e6464

Browse files
committed
💾 Feat: 增加异步遍历队列元素执行操作的扩展方法
1 parent 0647abc commit a8e6464

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

Common.BasicHelper/Util/Extension/QueueHelper.cs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Threading.Tasks;
34

45
namespace Common.BasicHelper.Util.Extension;
56

@@ -40,11 +41,11 @@ public static Queue<T> Pop<T>(this Queue<T> queue)
4041
public static bool IsEmpty<T>(this Queue<T> queue) => queue.Count == 0;
4142

4243
/// <summary>
43-
/// 判断队列是否为空
44+
/// 判断队列是否非空
4445
/// </summary>
4546
/// <typeparam name="T">队列类型</typeparam>
4647
/// <param name="queue">队列</param>
47-
/// <returns>是否为空</returns>
48+
/// <returns>是否非空</returns>
4849
public static bool IsNotEmpty<T>(this Queue<T> queue) => queue.Count > 0;
4950

5051
/// <summary>
@@ -81,4 +82,32 @@ Queue<T> func()
8182
}
8283
else return func();
8384
}
85+
86+
/// <summary>
87+
/// 异步遍历队列对每一个元素执行操作, 执行完毕后返回队列本身
88+
/// </summary>
89+
/// <typeparam name="T">队列类型</typeparam>
90+
/// <param name="queue">队列</param>
91+
/// <param name="action">对元素的操作</param>
92+
/// <param name="reappend">是否将出队元素重新入队</param>
93+
/// <param name="locker">操作锁</param>
94+
/// <returns>返回队列本身的任务</returns>
95+
public static async Task<Queue<T>> ForEachAsync<T>(this Queue<T> queue, Action<T> action,
96+
bool reappend = false)
97+
{
98+
Queue<T> func()
99+
{
100+
var count = queue.Count;
101+
while (count > 0)
102+
{
103+
var item = queue.Dequeue();
104+
action.Invoke(item);
105+
--count;
106+
if (reappend) queue.Enqueue(item);
107+
}
108+
return queue;
109+
}
110+
111+
return await Task.Run(func);
112+
}
84113
}

0 commit comments

Comments
 (0)