- linqpad_task1.zip
- Task Parallel Library
- 01. Creating Tasks.linq
- 02. Threads vs Tasks.linq
- 03. Uncaught Exception.linq
- 04. Handling Exception using Try Catch.linq
- 05. Handling Exception using Handle Method.linq
- 06. Handling Exception using the tasks Exception property.linq
- 07. Canceling task with resource cleanup.linq
- 08. Canceling single task.linq
- 09. Canceling one of several tasks.linq
- tasksarticle1.zip
- TasksArticle1
- BlockingOperations
- CancellingOneOfSeveralTasks
- CancellingSingleTask
- CreatingTasks
- HandleUsingExHandle
- HandlingByReadingTaskValues
- HandlingExceptionsUsingTryCatch
- TasksArticle1.sln
- TasksArticle1.suo
- ThreadsVersusTasks
- UncaughtExceptionInWinFormsDemoApp
- WinformsSynchonizationContext
- WPFDispatcherSynchonizationContext
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace CancellingSingleTask
{
/// <summary>
/// This example shows how to cancel a single Task
/// </summary>
class Program
{
static void Main(string[] args)
{
// create the cancellation token source
CancellationTokenSource tokenSource = new CancellationTokenSource();
// create the cancellation token
CancellationToken token = tokenSource.Token;
// create the task
Task<List<int>> taskWithFactoryAndState = Task.Factory.StartNew<List<int>>((stateObj) =>
{
List<int> ints = new List<int>();
for (int i = 0; i < (int)stateObj; i++)
{
ints.Add(i);
token.ThrowIfCancellationRequested();
Console.WriteLine("taskWithFactoryAndState, creating Item: {0}", i);
}
return ints;
}, 2000, token);
// write out the cancellation detail of each task
Console.WriteLine("Task cancelled? {0}", taskWithFactoryAndState.IsCanceled);
// cancel the second token source
tokenSource.Cancel();
if (!taskWithFactoryAndState.IsCanceled && !taskWithFactoryAndState.IsFaulted)
{
//since we want to use one of the Trigger method (ie Result), we must catch
//any AggregateException that occurs
try
{
if (!taskWithFactoryAndState.IsFaulted)
{
Console.WriteLine(string.Format("managed to get {0} items",
taskWithFactoryAndState.Result.Count));
}
}
catch (AggregateException aggEx)
{
foreach (Exception ex in aggEx.InnerExceptions)
{
Console.WriteLine(string.Format("Caught exception '{0}'", ex.Message));
}
}
finally
{
taskWithFactoryAndState.Dispose();
}
}
else
{
Console.WriteLine("Task cancelled? {0}", taskWithFactoryAndState.IsCanceled);
}
// wait for input before exiting
Console.WriteLine("Main method complete. Press enter to finish.");
Console.ReadLine();
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I currently hold the following qualifications (amongst others, I also studied Music Technology and Electronics, for my sins)
- MSc (Passed with distinctions), in Information Technology for E-Commerce
- BSc Hons (1st class) in Computer Science & Artificial Intelligence
Both of these at Sussex University UK.
Award(s)
I am lucky enough to have won a few awards for Zany Crazy code articles over the years
- Microsoft C# MVP 2016
- Codeproject MVP 2016
- Microsoft C# MVP 2015
- Codeproject MVP 2015
- Microsoft C# MVP 2014
- Codeproject MVP 2014
- Microsoft C# MVP 2013
- Codeproject MVP 2013
- Microsoft C# MVP 2012
- Codeproject MVP 2012
- Microsoft C# MVP 2011
- Codeproject MVP 2011
- Microsoft C# MVP 2010
- Codeproject MVP 2010
- Microsoft C# MVP 2009
- Codeproject MVP 2009
- Microsoft C# MVP 2008
- Codeproject MVP 2008
- And numerous codeproject awards which you can see over at my blog