mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
57 lines
1.2 KiB
C#
57 lines
1.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Concurrent;
|
|
using System.IO;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BilibiliEvolved.Build
|
|
{
|
|
static class Extensions
|
|
{
|
|
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action)
|
|
{
|
|
foreach (var item in collection)
|
|
{
|
|
action(item);
|
|
}
|
|
}
|
|
public static Action<T> Debounce<T>(Action<T> action, int waitTime)
|
|
{
|
|
var queue = new ConcurrentQueue<Action<T>>();
|
|
return async (T arg) =>
|
|
{
|
|
queue.Enqueue(action);
|
|
await Task.Delay(waitTime);
|
|
lock (queue) {
|
|
if (queue.TryDequeue(out var a))
|
|
{
|
|
if (queue.Count == 0)
|
|
{
|
|
a?.Invoke(arg);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
public static Action Debounce(Action action, int waitTime)
|
|
{
|
|
var queue = new ConcurrentQueue<Action>();
|
|
return async () =>
|
|
{
|
|
queue.Enqueue(action);
|
|
await Task.Delay(waitTime);
|
|
if (queue.TryDequeue(out var a))
|
|
{
|
|
if (queue.Count == 0)
|
|
{
|
|
a?.Invoke();
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|