// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT License. // See the LICENSE file in the project root for more information. namespace System.Threading.Tasks { internal static class TaskExtensions { public static Task ContinueWithState(this Task task, Action continuationAction, TState state) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state)); } public static Task ContinueWithState(this Task task, Action continuationAction, TState state, CancellationToken cancellationToken) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), cancellationToken); } public static Task ContinueWithState(this Task task, Action continuationAction, TState state, TaskContinuationOptions continuationOptions) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), continuationOptions); } public static Task ContinueWithState(this Task task, Action continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), cancellationToken, continuationOptions, TaskScheduler.Default); } public static Task ContinueWithState(this Task task, Action, TState> continuationAction, TState state) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState>, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state)); } public static Task ContinueWithState(this Task task, Action, TState> continuationAction, TState state, CancellationToken cancellationToken) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState>, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), cancellationToken); } public static Task ContinueWithState(this Task task, Action, TState> continuationAction, TState state, TaskContinuationOptions continuationOptions) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState>, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), continuationOptions); } public static Task ContinueWithState(this Task task, Action, TState> continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions) { return task.ContinueWith( (t, tupleObject) => { var (closureAction, closureState) = ((Action, TState>, TState))tupleObject!; closureAction(t, closureState); }, (continuationAction, state), cancellationToken, continuationOptions, TaskScheduler.Default); } } }