Идея : создать Task
, который печатает все большее число звездочек. Когда пользователь нажимает Enter
, Task
печатает 10 звездочек, а затем останавливается.Задача продолжения не выполняется, когда задача отменена
код:
namespace CancellingLongRunningTasks
{
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var cancellationTokenSource = new CancellationTokenSource();
var token = cancellationTokenSource.Token;
Task task = Task.Run(() =>
{
int count = 1;
while (!token.IsCancellationRequested)
{
Console.WriteLine(new string('*', count));
Thread.Sleep(1000);
count++;
}
}, token).ContinueWith(
parent =>
{
var count = 10;
while (count > 0)
{
Console.WriteLine(new string('*', count));
Thread.Sleep(1000);
count--;
}
}, TaskContinuationOptions.OnlyOnCanceled);
Console.WriteLine("Press enter to stop the task.");
if (Console.ReadLine().Contains(Environment.NewLine))
{
cancellationTokenSource.Cancel();
task.Wait();
}
}
}
}
вопрос: почему это не мое продолжение задача выполнена?
возможный дубликат [CancellationTokenSource не ведет как ожидалось] (http://stackoverflow.com/questions/24346706/cancellationtokensource-not-behaving-as-expected) – i3arnon