namespace Iceshrimp.Backend.Core.Extensions; public static class TaskExtensions { public static async Task SafeWaitAsync(this Task task, TimeSpan timeSpan) { try { await task.WaitAsync(timeSpan); } catch (TimeoutException) { // ignored } } public static async Task SafeWaitAsync(this Task task, CancellationToken token) { try { await task.WaitAsync(token); } catch (TaskCanceledException) { // ignored } } public static async Task SafeWaitAsync(this Task task, CancellationToken token, Action action) { try { await task.WaitAsync(token); } catch (TaskCanceledException) { action(); } } public static async Task SafeWaitAsync(this Task task, CancellationToken token, Func action) { try { await task.WaitAsync(token); } catch (TaskCanceledException) { await action(); } } public static List QueueMany(this Func factory, int n) => Enumerable.Range(0, n).Select(_ => factory()).ToList(); public static async Task> ToListAsync(this Task> task) { return (await task).ToList(); } public static async Task ContinueWithResult(this Task task, Action continuation) { await task; continuation(); } public static async Task ContinueWithResult(this Task task, Func continuation) { await task; return continuation(); } public static async Task ContinueWithResult(this Task task, Action continuation) { continuation(await task); } public static async Task ContinueWithResult( this Task task, Func continuation ) { return continuation(await task); } public static async Task ContinueWithResult(this Task task, Func continuation) { await task; await continuation(); } public static async Task ContinueWithResult( this Task task, Func> continuation ) { await task; return await continuation(); } public static async Task ContinueWithResult(this Task task, Func continuation) { await continuation(await task); } public static async Task ContinueWithResult( this Task task, Func> continuation ) { return await continuation(await task); } }