[CHANGE] Service extended and events
This commit is contained in:
@@ -6,6 +6,7 @@ public class CircularBuffer <T>
|
||||
{
|
||||
private readonly T[] _buffer;
|
||||
private readonly Channel<T> _channel;
|
||||
private readonly object _lock = new();
|
||||
|
||||
public int Capacity { get; }
|
||||
public int Head { get; private set; }
|
||||
@@ -30,14 +31,17 @@ public class CircularBuffer <T>
|
||||
|
||||
public void Add(T item)
|
||||
{
|
||||
_buffer[Head] = item;
|
||||
Head = (Head + 1) % _buffer.Length;
|
||||
|
||||
if (Count < _buffer.Length)
|
||||
lock (_lock)
|
||||
{
|
||||
Count++;
|
||||
_buffer[Head] = item;
|
||||
Head = (Head + 1) % _buffer.Length;
|
||||
|
||||
if (Count < _buffer.Length)
|
||||
{
|
||||
Count++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
_channel.Writer.TryWrite(item);
|
||||
}
|
||||
|
||||
@@ -47,7 +51,10 @@ public class CircularBuffer <T>
|
||||
{
|
||||
for (var i = 0; i < Count; i++)
|
||||
{
|
||||
yield return _buffer[(Head - Count + i + _buffer.Length) % _buffer.Length];
|
||||
lock (_lock)
|
||||
{
|
||||
yield return _buffer[(Head - Count + i + _buffer.Length) % _buffer.Length];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user