I am using an external library that has async methods, but not CancellationToken overloads.
Now currently I am using an extension method from another StackOverflow question to add a CancellationToken:
public async static Task HandleCancellation(this Task asyncTask, CancellationToken cancellationToken) { // Create another task that completes as soon as cancellation is requested. http://stackoverflow.com/a/18672893/1149773 TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); cancellationToken.Register(() => tcs.TrySetCanceled(), useSynchronizationContext: false); Task cancellationTask = tcs.Task; // Create a task that completes when either the async operation completes, or // cancellation is requested. Task readyTask = await Task.WhenAny(asyncTask, cancellationTask); // In case of cancellation, register a continuation to observe any unhandled exceptions // from the asynchronous operation (once it completes). In .NET 4.0, unobserved task // exceptions would terminate the process. if (readyTask == cancellationTask) asyncTask.ContinueWith(_ => asyncTask.Exception, TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously); await readyTask; } However the underlying task still executes to completion. This wouldn't be much of a problem, but sometimes the underlying task never completes and consumes 99% of my CPU.
Is there any way to "kill" the task without killing the process?