Skip to content

Commit 8c8e0ec

Browse files
committed
improvements to manual scale examples
1 parent 4a73bfd commit 8c8e0ec

1 file changed

Lines changed: 117 additions & 1 deletion

File tree

samples/RingBufferPlusBasicManualScale/Program.cs

Lines changed: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static async Task Main(string[] args)
2626
Random rnd = new();
2727

2828
//token to app control gracefull shutdown
29-
using var cts = new CancellationTokenSource();
29+
var cts = new CancellationTokenSource();
3030

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

46+
Console.WriteLine("Starting Manual scale with non lock");
47+
4648
Console.WriteLine("Swith to MinCapacity");
4749
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
4850
var sw = Stopwatch.StartNew();
@@ -134,6 +136,120 @@ public static async Task Main(string[] args)
134136
Console.WriteLine($"Ring Buffer Current is {rb.CurrentCapacity}");
135137
}
136138
sw.Reset();
139+
140+
cts.Dispose();
141+
142+
Console.WriteLine("Starting Manual scale with lock");
143+
144+
cts = new CancellationTokenSource();
145+
146+
rb = await RingBuffer<int>.New("MyBuffer")
147+
.Capacity(6)
148+
.Logger(HostApp.Services.GetService<ILogger<Program>>())
149+
.Factory((_) => { return Task.FromResult(rnd.Next(1, 10)); })
150+
.ScaleTimer()
151+
.LockWhenScaling()
152+
.MinCapacity(3)
153+
.MaxCapacity(9)
154+
.BuildWarmupAsync(cts.Token);
155+
156+
Console.WriteLine($"Ring Buffer name({rb.Name}) created.");
157+
Console.WriteLine($"Ring Buffer Current capacity is : {rb.CurrentCapacity}");
158+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
159+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
160+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
161+
162+
Console.WriteLine("Swith to MinCapacity");
163+
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
164+
sw.Start();
165+
while (sw.ElapsedMilliseconds < 5000)
166+
{
167+
Thread.Sleep(1000);
168+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
169+
}
170+
sw.Reset();
171+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
172+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
173+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
174+
175+
Console.WriteLine("Swith to MaxCapacity");
176+
await rb.SwitchToAsync(ScaleSwitch.MaxCapacity);
177+
sw.Start();
178+
while (sw.ElapsedMilliseconds < 5000)
179+
{
180+
Thread.Sleep(1000);
181+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
182+
}
183+
sw.Reset();
184+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
185+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
186+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
187+
188+
Console.WriteLine("Swith to initial Capacity");
189+
await rb.SwitchToAsync(ScaleSwitch.InitCapacity);
190+
sw.Start();
191+
while (sw.ElapsedMilliseconds < 5000)
192+
{
193+
Thread.Sleep(1000);
194+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
195+
}
196+
sw.Reset();
197+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
198+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
199+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
200+
201+
Console.WriteLine("Swith to MaxCapacity");
202+
await rb.SwitchToAsync(ScaleSwitch.MaxCapacity);
203+
sw.Start();
204+
while (sw.ElapsedMilliseconds < 5000)
205+
{
206+
Thread.Sleep(1000);
207+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
208+
}
209+
sw.Reset();
210+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
211+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
212+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
213+
214+
Console.WriteLine("Swith to MinCapacity");
215+
await rb.SwitchToAsync(ScaleSwitch.MinCapacity);
216+
sw.Start();
217+
while (sw.ElapsedMilliseconds < 5000)
218+
{
219+
Thread.Sleep(1000);
220+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
221+
}
222+
sw.Reset();
223+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
224+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
225+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
226+
227+
Console.WriteLine("Swith to defaut Capacity");
228+
await rb.SwitchToAsync(ScaleSwitch.InitCapacity);
229+
sw.Start();
230+
while (sw.ElapsedMilliseconds < 5000)
231+
{
232+
Thread.Sleep(1000);
233+
Console.WriteLine($"Ring Buffer Current capacity switch to {rb.CurrentCapacity}");
234+
}
235+
sw.Reset();
236+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsInitCapacity = {rb.IsInitCapacity}.");
237+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMaxCapacity = {rb.IsMaxCapacity}.");
238+
Console.WriteLine($"Ring Buffer name({rb.Name}) IsMinCapacity = {rb.IsMinCapacity}.");
239+
240+
Console.WriteLine("Dispose ring buffer");
241+
242+
cts.Cancel();
243+
244+
Console.WriteLine($"Dispose Ring Buffer...");
245+
cts.Cancel();
246+
sw.Start();
247+
while (sw.ElapsedMilliseconds < 5000)
248+
{
249+
Thread.Sleep(1000);
250+
Console.WriteLine($"Ring Buffer Current is {rb.CurrentCapacity}");
251+
}
252+
sw.Reset();
137253
}
138254

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

0 commit comments

Comments
 (0)