Abort thread on new request, but complete only last request
Basically it is in its current state senseless to have a  

var listCancellationTokens = new List&lt;CancellationTokenSource&gt;();  


if all you want is one running thread at any time.  

So what I suggest instead is to create one Task and if there comes the situation that this task should be canceled you should cancel the task and Wait until the task returned.  

After the Task returned you then create the new Task.  

private static Task task;
private static CancellationTokenSource cancelSource;
static void Main(string[] args)
{

    for (var i = 1; i &lt;= 5; i++)
    {
        if(task != null &amp;&amp; (!task.IsCompleted || !task.IsFaulted))
        {

            try 
            {
                cancelSource.Cancel();
                task.Wait(cancelSource.Token);
            }
            catch (OperationCanceledException ex) 
            { 
                //swallow because by using ThrowIfCancellationRequested() 
                //in combination with cancelSource.Cancel() an exception is thrown.
            }
        }
        cancelSource = new CancellationTokenSource();

        task = Task.Factory.StartNew(() =&gt; ConsolidateResults(cancelSource.Token));

    }
    Console.ReadLine();
}  


then you should change the ConsolidateResults() method to  

private static void ConsolidateResults(CancellationToken cancelToken)
{
    cancelToken.ThrowIfCancellationRequested();

    UpdateValues();
    TurnOffEvents();
    GetMarginPercentage();
    TurnOnEvents();
}