@@ -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