AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="1.2.0-beta.410" />

 EventLoopExtensions

public static class EventLoopExtensions
A set of useful extensions for the event loop.
using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Browser { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public static class EventLoopExtensions { public static void Enqueue([System.Runtime.CompilerServices.Nullable(2)] this IEventLoop loop, Action action, TaskPriority priority = TaskPriority.Normal) { if (loop != null) loop.Enqueue(delegate { action(); }, priority); else action(); } public static Task<T> EnqueueAsync<[System.Runtime.CompilerServices.Nullable(2)] T>([System.Runtime.CompilerServices.Nullable(2)] 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; } } }