Concurrency and Source Panels
Client and Worker Files
Replay one C# execution where a client file calls a worker file and prints the response.
source panel
When an example has more than one source file, the replay UI keeps each file in its own panel while preserving one ordered trace stream. The Variables panel follows the actual call into the worker file and the return back to the client.
boundary
The client file owns the entry point and selected command. The worker file owns the response rule for that command.
Project Entry
RequestClient.cs
Replay: real traced execution (multi-file project)
using System;
class Program
{
static void Main()
{
string selected = "status";
int requestId = 42;
string label = selected;
if (selected == "refresh")
{
label = "cache";
}
else if (selected == "archive")
{
label = "records";
}
string response = RequestWorker.Handle(selected);
int ticket = requestId + selected.Length;
Console.WriteLine("label=" + label);
Console.WriteLine("ticket=" + ticket);
Console.WriteLine(response);
}
}
using System;
class Program
{
static void Main()
{
string selected = "refresh";
int requestId = 42;
string label = selected;
if (selected == "refresh")
{
label = "cache";
}
else if (selected == "archive")
{
label = "records";
}
string response = RequestWorker.Handle(selected);
int ticket = requestId + selected.Length;
Console.WriteLine("label=" + label);
Console.WriteLine("ticket=" + ticket);
Console.WriteLine(response);
}
}
using System;
class Program
{
static void Main()
{
string selected = "archive";
int requestId = 42;
string label = selected;
if (selected == "refresh")
{
label = "cache";
}
else if (selected == "archive")
{
label = "records";
}
string response = RequestWorker.Handle(selected);
int ticket = requestId + selected.Length;
Console.WriteLine("label=" + label);
Console.WriteLine("ticket=" + ticket);
Console.WriteLine(response);
}
}
selected ← status, requestId ← 42, label ← status
4{5 static void Main()6 {7 string selected→ status = "status"; //@selected="refresh", "archive"8 int requestId→ 42 = 42;9 string label→ status = selectedstatus;1011 if (selected == "refresh")12 {13 label = "cache";14 }15 else if (selected == "archive")16 {17 label = "records";18 }1920 string response = RequestWorker.Handle(selectedstatus);21 int ticket = requestId + selected.Length;access ← ok, response ← service ready
3class Program4{5 static void Main()6 {7 string selected = "status"; //@selected="refresh", "archive"values this stepokaccessservice readyresponsestatuscommandresponse ← service ready
20string response = RequestWorker.Handle(selected);21int ticket = requestId + selected.Length;2223Console.WriteLine("label=" + label);24Console.WriteLine("ticket=" + ticket);values this stepservice readyresponseStep 26
25 Console.WriteLine(response);26 }27}values this stepokaccessservice readyresponseresponse ← ok:service ready, ticket ← 48
20 string response→ ok:service ready = RequestWorker.Handle(selectedstatus);21 int ticket→ 48 = requestId42 + selected.Length6;2223 Console.WriteLine("label=" + labelstatus);24 Console.WriteLine("ticket=" + ticket48);25 Console.WriteLine(responseok:service ready);26}outputlabel=status ticket=48 ok:service ready