TaskExtensions
using System.Runtime.CompilerServices;
namespace System.Threading.Tasks
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal static class TaskExtensions
    {
        public static Task ContinueWithState<[System.Runtime.CompilerServices.Nullable(2)] TState>(this Task task, Action<Task, TState> continuationAction, TState state, TaskContinuationOptions continuationOptions, CancellationToken cancellationToken)
        {
            return task.ContinueWith(delegate(Task t, object tupleObject) {
                (Action<Task, TState>, TState) obj = ((Action<Task, TState>, TState))tupleObject;
                Action<Task, TState> item = obj.Item1;
                TState item2 = obj.Item2;
                item(t, item2);
            }, (continuationAction, state), cancellationToken, continuationOptions, TaskScheduler.Default);
        }
        public static Task ContinueWithState<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, CancellationToken cancellationToken)
        {
            return task.ContinueWith((Action<Task<TResult>, object>)delegate(Task<TResult> t, object tupleObject) {
                (Action<Task<TResult>, TState>, TState) obj = ((Action<Task<TResult>, TState>, TState))tupleObject;
                Action<Task<TResult>, TState> item = obj.Item1;
                TState item2 = obj.Item2;
                item(t, item2);
            }, (object)(continuationAction, state), cancellationToken);
        }
        public static Task ContinueWithState<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, TaskContinuationOptions continuationOptions, CancellationToken cancellationToken)
        {
            return task.ContinueWith((Action<Task<TResult>, object>)delegate(Task<TResult> t, object tupleObject) {
                (Action<Task<TResult>, TState>, TState) obj = ((Action<Task<TResult>, TState>, TState))tupleObject;
                Action<Task<TResult>, TState> item = obj.Item1;
                TState item2 = obj.Item2;
                item(t, item2);
            }, (object)(continuationAction, state), cancellationToken, continuationOptions, TaskScheduler.Default);
        }
    }
}