namespace Mediapipe.Extension; internal static class TaskExtension { // polyfill for Task.WaitAsync public static async Task WaitAsync(this Task task, CancellationToken cancellationToken) { TaskCompletionSource tcs = new(); using (cancellationToken.Register(state => ((TaskCompletionSource)state!).TrySetCanceled(), tcs)) { return await (await Task.WhenAny(task, tcs.Task).ConfigureAwait(false)).ConfigureAwait(false); } } }