0
チャネル入力はどのようにして優先順位付けされた方法で処理できますか? Scalaの "reactWithin(0) { ... case TIMEOUT }
"構成に相当するものが にありますか?Retlangでのチャネル入力の優先順位付け
チャネル入力はどのようにして優先順位付けされた方法で処理できますか? Scalaの "reactWithin(0) { ... case TIMEOUT }
"構成に相当するものが にありますか?Retlangでのチャネル入力の優先順位付け
設定した間隔で優先順位付きメッセージを配信するSubscriptionクラスを作成しました。優先順位付けされたメッセージを消費するのは理想的な一般的な方法ではありませんが、私はそれを後世向けに投稿します。カスタムRequestReplyChannelは、他の特定のケースではより良いオプションになると思います。 PriorityQueueの実装は、読者の練習として残されています。
class PrioritySubscriber<T> : BaseSubscription<T>
{
private readonly PriorityQueue<T> queue;
private readonly IScheduler scheduler;
private readonly Action<T> receive;
private readonly int interval;
private readonly object sync = new object();
private ITimerControl next = null;
public PrioritySubscriber(IComparer<T> comparer, IScheduler scheduler,
Action<T> receive, int interval)
{
this.queue = new PriorityQueue<T>(comparer);
this.scheduler = scheduler;
this.receive = receive;
this.interval = interval;
}
protected override void OnMessageOnProducerThread(T msg)
{
lock (this.sync)
{
this.queue.Enqueue(msg);
if (this.next == null)
{
this.next =
this.scheduler.Schedule(this.Receive, this.interval);
}
}
}
private void Receive()
{
T msg;
lock (this.sync)
{
msg = this.queue.Dequeue();
if (this.queue.Count > 0)
{
this.next =
this.scheduler.Schedule(this.Receive, this.interval);
}
}
this.receive(msg);
}
}
の代わりには、.NET(OrderedBag)についてWintellectのPowerコレクションを使用して検討することもでき、あなた自身を書いて、あなたはCodePlexの経由でこれらを見つけることができます。 –
Rick