-
Notifications
You must be signed in to change notification settings - Fork 1k
/
UnboundedMessageQueue.cs
51 lines (44 loc) · 1.61 KB
/
UnboundedMessageQueue.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//-----------------------------------------------------------------------
// <copyright file="UnboundedMessageQueue.cs" company="Akka.NET Project">
// Copyright (C) 2009-2023 Lightbend Inc. <http://www.lightbend.com>
// Copyright (C) 2013-2023 .NET Foundation <https://github.com/akkadotnet/akka.net>
// </copyright>
//-----------------------------------------------------------------------
using Akka.Actor;
using TQueue = System.Collections.Concurrent.ConcurrentQueue<Akka.Actor.Envelope>;
namespace Akka.Dispatch.MessageQueues
{
/// <summary> An unbounded mailbox message queue. </summary>
public class UnboundedMessageQueue : IMessageQueue, IUnboundedMessageQueueSemantics
{
private readonly TQueue _queue = new();
/// <inheritdoc cref="IMessageQueue"/>
public bool HasMessages
{
get { return !_queue.IsEmpty; }
}
/// <inheritdoc cref="IMessageQueue"/>
public int Count
{
get { return _queue.Count; }
}
/// <inheritdoc cref="IMessageQueue"/>
public void Enqueue(IActorRef receiver, Envelope envelope)
{
_queue.Enqueue(envelope);
}
/// <inheritdoc cref="IMessageQueue"/>
public bool TryDequeue(out Envelope envelope)
{
return _queue.TryDequeue(out envelope);
}
/// <inheritdoc cref="IMessageQueue"/>
public void CleanUp(IActorRef owner, IMessageQueue deadletters)
{
while (TryDequeue(out var msg))
{
deadletters.Enqueue(owner, msg);
}
}
}
}