8
私はコンカレントコレクションを持っています。タイムアウトのある.NETの同時収集ですか?
var q = new ConcurrentQueue<int>(); // Or a stack/bag/etc...
私はこのようなアイテムを得ることができます。
int i;
if (q.TryDequeue(out i))
DoStuff(i);
しかし、私は次のようにそれを必要とする「場合の誰かではfalseを返す前に10秒待って、新しいアイテムを追加」:
int i;
if (q.TryDequeue(TimeSpan.FromSeconds(10), out i))
DoStuff(i);
私はこのような拡張メソッドを書くことができます:
public static bool TryDequeue<T>(
this ConcurrentQueue<T> queue,
TimeSpan timeout,
out T result)
{
// Validations...
for (int i = 0; i < 2; i++)
{
if (queue.TryDequeue(out result))
return true;
else if (i == 1)
return false;
Thread.Sleep(timeout);
}
}
しかし、誰かが5秒後にキューにアイテムを追加した場合、私は5つ以上待ってはいけません。
.NETでこの機能をサポートするスレッドセーフなコレクションはありますか?
[Rx](http://msdn.microsoft.com/en-us/data/gg577609.aspx)のようなものです。 。メモリが使用されている場合、時間ベースのポーリングを行うことは可能です。しかし、マルチスレッドのサポートがどんなものかはわかりません。 –
@Adam:それを調べます。ありがとうございます。 –