0
채널 입력을 우선 순위 방식으로 어떻게 처리 할 수 있습니까? Scala의 "reactWithin(0) { ... case TIMEOUT }
"구조에 해당하는 이 있습니까?Retlang의 채널 입력 우선 순위 지정
채널 입력을 우선 순위 방식으로 어떻게 처리 할 수 있습니까? Scala의 "reactWithin(0) { ... case TIMEOUT }
"구조에 해당하는 이 있습니까?Retlang의 채널 입력 우선 순위 지정
설정된 간격으로 우선 순위가 지정된 메시지를 전달하는 Subscription 클래스를 작성했습니다. 우선 순위가 매겨진 메시지를 소비하는 가장 이상적인 일반적인 방법은 아니지만 후일을 위해 게시합니다. 나는 커스텀 RequestReplyChannel이 특정 다른 경우에 더 좋은 옵션이 될 것이라고 생각한다. PriorityQueue 구현은 독자에게 연습 과제로 남겨 둡니다. 대신 (OrderedBag
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);
}
}
, 당신은 코드 플렉스를 통해 다음을 찾을 수 있습니다. – Rick