 <p>I would create a helper class that takes an input operation, starting it, and cancelling the existing one, and overwriting its internal variable. As you cant perform a <code>Cancel()</code> explicitly and directly on a <code>Task&lt;T&gt;</code>, you will need to keep your own <code>TaskCancellationSource</code> handy. If you want to provide an external token, you can combine them with <code>CancellationTokenSource.CreateLinkedTokenSource(...)</code> If you need to keep an eye on the result, that would make a good opportunity for TaskCompletionSource.</p> <pre><code>public class OverwriteTaskHandler&lt;T&gt; { private Task&lt;T&gt; _task; private TaskCompletionSource&lt;T&gt; _tcs; private CancellationTokenSource _cts; public OverwriteTaskHandler(Func&lt;T&gt; operation) { _tcs = new TaskCompletionSource&lt;T&gt;(); _cts = new CancellationTokenSource(); TryPushTask(operation); } public bool TryPushTask(Func&lt;T&gt; operation) { if (_tcs.Task.IsCompleted) return false; //It would be unsafe to use this instance as it is already "finished" _cts.Cancel(); _cts = new CancellationTokenSource(); _task = Task.Run(operation, _cts.Token); _task.ContinueWith(task =&gt; _tcs.SetResult(task.Result)); return true; } public void Cancel() { _cts.Cancel(); } public Task&lt;T&gt; WrappedTask { get { return _tcs.Task; } } } </code></pre> <p><strong>Discalimer:</strong> I haven't tested this, so just double check!</p>