SynchronizationContextExtensions
using System.Runtime.CompilerServices;
using System.Threading;
namespace System.Reactive.Concurrency
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal static class SynchronizationContextExtensions
    {
        public static void PostWithStartComplete<[System.Runtime.CompilerServices.Nullable(2)] T>(this SynchronizationContext context, Action<T> action, T state)
        {
            context.OperationStarted();
            context.Post(delegate(object o) {
                try {
                    action((T)o);
                } finally {
                    context.OperationCompleted();
                }
            }, state);
        }
        public static void PostWithStartComplete(this SynchronizationContext context, Action action)
        {
            context.OperationStarted();
            context.Post(delegate {
                try {
                    action();
                } finally {
                    context.OperationCompleted();
                }
            }, null);
        }
    }
}