@@ -39,7 +39,7 @@ static async Task Main(string[] args)
3939
4040 await BidirectionalStreamingExample ( client ) ;
4141
42- Console . WriteLine ( "Shutting down " ) ;
42+ Console . WriteLine ( "Finished " ) ;
4343 Console . WriteLine ( "Press any key to exit..." ) ;
4444 Console . ReadKey ( ) ;
4545 }
@@ -49,34 +49,56 @@ private static async Task BidirectionalStreamingExample(Racer.RacerClient client
4949 var headers = new Metadata { new Metadata . Entry ( "race-duration" , RaceDuration . ToString ( ) ) } ;
5050
5151 Console . WriteLine ( "Ready, set, go!" ) ;
52- using ( var call = client . ReadySetGo ( new CallOptions ( headers ) ) )
52+ using var call = client . ReadySetGo ( new CallOptions ( headers ) ) ;
53+ var complete = false ;
54+
55+ // Read incoming messages in a background task
56+ RaceMessage ? lastMessageReceived = null ;
57+ var readTask = Task . Run ( async ( ) =>
5358 {
59+ await foreach ( var message in call . ResponseStream . ReadAllAsync ( ) )
60+ {
61+ lastMessageReceived = message ;
62+ }
63+ } ) ;
64+
65+ // Write outgoing messages until timer is complete
66+ var sw = Stopwatch . StartNew ( ) ;
67+ var sent = 0 ;
5468
55- // Read incoming messages in a background task
56- RaceMessage ? lastMessageReceived = null ;
57- var readTask = Task . Run ( async ( ) =>
69+ #region Reporting
70+ // Report requests in realtime
71+ var reportTask = Task . Run ( async ( ) =>
72+ {
73+ while ( true )
5874 {
59- await foreach ( var message in call . ResponseStream . ReadAllAsync ( ) )
75+ Console . WriteLine ( $ "Messages sent: { sent } ") ;
76+ Console . WriteLine ( $ "Messages received: { lastMessageReceived ? . Count ?? 0 } ") ;
77+
78+ if ( ! complete )
6079 {
61- lastMessageReceived = message ;
80+ await Task . Delay ( TimeSpan . FromSeconds ( 1 ) ) ;
81+ Console . SetCursorPosition ( 0 , Console . CursorTop - 2 ) ;
82+ }
83+ else
84+ {
85+ break ;
6286 }
63- } ) ;
64-
65- // Write outgoing messages until timer is complete
66- var sw = Stopwatch . StartNew ( ) ;
67- var sent = 0 ;
68- while ( sw . Elapsed < RaceDuration )
69- {
70- await call . RequestStream . WriteAsync ( new RaceMessage { Count = ++ sent } ) ;
7187 }
88+ } ) ;
89+ #endregion
7290
73- // Finish call and report results
74- await call . RequestStream . CompleteAsync ( ) ;
75- await readTask ;
76-
77- Console . WriteLine ( $ "Messages sent: { sent } ") ;
78- Console . WriteLine ( $ "Messages received: { lastMessageReceived ? . Count ?? 0 } ") ;
91+ while ( sw . Elapsed < RaceDuration )
92+ {
93+ await call . RequestStream . WriteAsync ( new RaceMessage { Count = ++ sent } ) ;
7994 }
95+
96+ // Finish call and report results
97+ await call . RequestStream . CompleteAsync ( ) ;
98+ await readTask ;
99+
100+ complete = true ;
101+ await reportTask ;
80102 }
81103 }
82104}
0 commit comments