27 lines
709 B
C#
27 lines
709 B
C#
namespace Lagrange.OneBot.Utility.Fallbacks;
|
|
|
|
public class FallbackAsync<T>
|
|
{
|
|
private readonly List<Func<CancellationToken, Task<T?>>> _executors = [];
|
|
|
|
internal static FallbackAsync<T> Create()
|
|
{
|
|
return new();
|
|
}
|
|
|
|
public FallbackAsync<T> Add(Func<CancellationToken, Task<T?>> executor)
|
|
{
|
|
_executors.Add(executor);
|
|
return this;
|
|
}
|
|
|
|
public async Task<T> ExecuteAsync(Func<CancellationToken, Task<T>> @default, CancellationToken token = default)
|
|
{
|
|
foreach (var executor in _executors)
|
|
{
|
|
var result = await executor(token);
|
|
if (result != null) return result;
|
|
}
|
|
return await @default(token);
|
|
}
|
|
} |