AsyncDolls.AsyncPumpScript.HandleMessageUnderSpecialScheduler C# (CSharp) Method

HandleMessageUnderSpecialScheduler() static private method

static private HandleMessageUnderSpecialScheduler ( bool configureAwait, CancellationToken cancellationToken = default(CancellationToken) ) : Task
configureAwait bool
cancellationToken System.Threading.CancellationToken
return Task
        static Task HandleMessageUnderSpecialScheduler(bool configureAwait, CancellationToken cancellationToken = default(CancellationToken))
        {
            var startNewTask = Task.Factory.StartNew(async () =>
            {
                #region Output

                var scheduler = TaskScheduler.Current as LimitedConcurrencyLevelTaskScheduler;
                if (scheduler != null)
                {
                    "StartNew: Before Delay Limiting Scheduler".Output();
                }
                else
                {
                    "StartNew: Before Delay".Output();
                }

                #endregion

                await Task.Delay(1000, cancellationToken).ConfigureAwait(configureAwait);

                #region Output

                scheduler = TaskScheduler.Current as LimitedConcurrencyLevelTaskScheduler;
                if (scheduler != null)
                {
                    "StartNew: After Delay Limiting Scheduler".Output();
                }
                else
                {
                    "StartNew: After Delay".Output();
                }

                #endregion

            })
            .Unwrap();

            var runTask = Task.Run(async () =>
            {
                #region Output

                var scheduler = TaskScheduler.Current as LimitedConcurrencyLevelTaskScheduler;
                if (scheduler != null)
                {
                    "Run: Before Delay Limiting Scheduler".Output();
                }
                else
                {
                    "Run: Before Delay".Output();
                }

                #endregion

                await Task.Delay(1000, cancellationToken).ConfigureAwait(configureAwait);

                #region Output

                scheduler = TaskScheduler.Current as LimitedConcurrencyLevelTaskScheduler;
                if (scheduler != null)
                {
                    "Run: After Delay Limiting Scheduler".Output();
                }
                else
                {
                    "Run: After Delay".Output();
                }

                #endregion

            });

            return Task.WhenAll(startNewTask, runTask);
        }
    }