Skip to content

Instantly share code, notes, and snippets.

@luisdeol
Created November 19, 2017 20:06
Show Gist options
  • Save luisdeol/78664c93c4ff97fef4fdab4e442f3168 to your computer and use it in GitHub Desktop.
Save luisdeol/78664c93c4ff97fef4fdab4e442f3168 to your computer and use it in GitHub Desktop.
Using ContinueWith and Cancellation of a Task
namespace manage_multithreading
{
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
int theCount = 0;
Console.WriteLine("Task running...Count from 0 to...");
Console.WriteLine("Press ENTER to interrupt the execution!");
Task theIncredibleTask = Task.Run(() =>
{
while (!token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
Thread.Sleep(1000);
Console.WriteLine(theCount.ToString());
theCount++;
}
}, token)
.ContinueWith(task =>
{
Console.WriteLine("You just cancelled the theIncredibleTask task! :(");
}, TaskContinuationOptions.OnlyOnCanceled);
Console.ReadLine();
cancellationTokenSource.Cancel();
try
{
theIncredibleTask.Wait(token);
}
catch (OperationCanceledException exception)
{
Console.WriteLine("You just cancelled the Task!");
}
Console.ReadLine();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment