AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.14.0" />

 EventLoopExtensions

public static class EventLoopExtensions
A set of useful extensions for the event loop.
using System; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Browser { public static class EventLoopExtensions { public static void Enqueue(this IEventLoop loop, Action action, TaskPriority priority = TaskPriority.Normal) { if (loop != null) loop.Enqueue(delegate { action(); }, priority); else action(); } public static Task<T> EnqueueAsync<T>(this IEventLoop loop, Func<CancellationToken, T> action, TaskPriority priority = TaskPriority.Normal) { if (loop == null) try { return Task.FromResult(action(default(CancellationToken))); } catch (Exception exception) { return Task.FromException<T>(exception); } TaskCompletionSource<T> tcs = (TaskCompletionSource<T>)new TaskCompletionSource<T>(); loop.Enqueue(delegate(CancellationToken c) { try { ((TaskCompletionSource<T>)tcs).SetResult(action(c)); } catch (Exception exception2) { ((TaskCompletionSource<T>)tcs).SetException(exception2); } }, priority); return ((TaskCompletionSource<T>)tcs).Task; } } }