非同期の ProducerConsumerCollection を作成しようとしています。そのために、この msdn ページ ( http://msdn.microsoft.com/en-us/library/hh873173.aspx (ページの下部)) を使用しています。
私は今、タイムアウトを追加しようとしています。これが私がしていることです:
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 によって「作成」されているため、キャンセルトークンを渡すことはできませんか?
では、それをキャンセルして、この Take with timeout を適切に実装するにはどうすればよいでしょうか?
ありがとう :)