Skip to content

Commit 797619b

Browse files
authored
Racer example reports progress in realtime (#1000)
1 parent aca0a8d commit 797619b

File tree

1 file changed

+43
-21
lines changed

1 file changed

+43
-21
lines changed

examples/Racer/Client/Program.cs

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)