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);
}
}
}
此代码存在问题,如果超时,它不会取消Take()方法创建的任务。
由于该任务已被TaskCompletionSource“创建”,因此我无法给它一个cancellationToken?
那么,如何取消它并正确实现具有超时的Take操作呢?
谢谢:)
m_collection.Count == 0):ct.Register(() => tcs.TrySetResult(default(T)));这个TrySetResult被正确调用了,但是取消的任务似乎没有被正确关闭 :( - Nisalon