Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 117 additions & 1 deletion samples/RingBufferPlusBasicManualScale/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public static async Task Main(string[] args)
Random rnd = new();

//token to app control gracefull shutdown
using var cts = new CancellationTokenSource();
var cts = new CancellationTokenSource();

var rb = await RingBuffer<int>.New("MyBuffer")
.Capacity(6)
Expand All @@ -43,6 +43,8 @@ public static async Task Main(string[] args)
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Starting Manual scale with non lock");

Console.WriteLine("Swith to MinCapacity");
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
var sw = Stopwatch.StartNew();
Expand Down Expand Up @@ -134,6 +136,120 @@ public static async Task Main(string[] args)
Console.WriteLine($"Ring Buffer Current is {rb.CurrentCapacity}");
}
sw.Reset();

cts.Dispose();

Console.WriteLine("Starting Manual scale with lock");

cts = new CancellationTokenSource();

rb = await RingBuffer<int>.New("MyBuffer")
.Capacity(6)
.Logger(HostApp.Services.GetService<ILogger<Program>>())
.Factory((_) => { return Task.FromResult(rnd.Next(1, 10)); })
.ScaleTimer()
.LockWhenScaling()
.MinCapacity(3)
.MaxCapacity(9)
.BuildWarmupAsync(cts.Token);

Console.WriteLine($"Ring Buffer name({rb.Name}) created.");
Console.WriteLine($"Ring Buffer Current capacity is : {rb.CurrentCapacity}");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to MinCapacity");
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to MaxCapacity");
await rb.SwitchToAsync(ScaleSwitch.MaxCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to initial Capacity");
await rb.SwitchToAsync(ScaleSwitch.InitCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to MaxCapacity");
await rb.SwitchToAsync(ScaleSwitch.MaxCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to MinCapacity");
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Swith to defaut Capacity");
await rb.SwitchToAsync(ScaleSwitch.InitCapacity);
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
}
sw.Reset();
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");

Console.WriteLine("Dispose ring buffer");

cts.Cancel();

Console.WriteLine($"Dispose Ring Buffer...");
cts.Cancel();
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
Thread.Sleep(1000);
Console.WriteLine($"Ring Buffer Current is {rb.CurrentCapacity}");
}
sw.Reset();
}

private static IHostBuilder CreateHostBuilder(string[] args) =>
Expand Down