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);
}
}