I'm trying to create an async ProducerConsumerCollection and for that, I'm using this msdn page (<http://msdn.microsoft.com/en-us/library/hh873173.aspx> (bottom of the page)).

I'm now trying to add a timeout, here is what I do :

```
    public async Task<T> TakeWithTimeout(int timeout)
    {
            Task<T> takeTask = this.Take();

            if (timeout <= 0 || takeTask == await Task.WhenAny(this.tasks.Take(), Task.Delay(timeout)))
            {
                return await takeTask;
            }
            else
            {
                // Timeout
                return default(T);
            }
        }
    }

```

The problem with this code is that, in case of timeout, it does not cancel the task created by the Take() method. 

Since this task has been "created" by the TaskCompletionSource, I cannot give it a cancellationToken?

So, how to proceed to cancel it and properly implement this Take with timeout ?

Thanks :)