Nella mia app ho un bug che sembra mostrare il suo volto solo quando sospendo l'app nel debugger per alcuni minuti. Sospetto che ciò sia dovuto a una libreria di rete di terze parti che sto usando con un thread heartbeat, che viene disconnesso quando non può eseguire il ping del server mentre il thread heartbeat è in pausa.Sospensione di tutti i thread nel processo corrente in fase di esecuzione
Sto provando a scrivere un'app di test case per verificare che questa sia la causa del bug. Per fare ciò, ho bisogno di un modo per mettere in pausa tutti i thread nell'app (che in seguito mi limiterò a mettere in pausa solo il thread che sospetto possa essere il thread heartbeat) per simulare l'interruzione dell'app nel debugger.
Qualcuno sa come fare? È persino possibile che un thread faccia dormire un altro?
Grazie, Alex
UPDATE:
ho finito per decidere che non ho davvero bisogno di un app per fare questo per me, visto che il punto era solo per verificare che una pausa nel debugger stava causando la disconnessione. Quindi, ecco quello che ho fatto ... (I modi più semplici sono spesso le migliori ... o per lo meno la più semplice ...)
private static void Main(string[] args)
{
IPubSubAdapter adapter = BuildAdapter();
bool waitingForMessage;
adapter.Subscribe(_topic, message => waitingForMessage = false, DestinationType.Topic);
Stopwatch timePaused = new Stopwatch();
while (adapter.IsConnected)
{
Console.WriteLine("Adapter is still connected");
waitingForMessage = true;
adapter.Publish(_topic, "testmessage", DestinationType.Topic);
while (waitingForMessage)
{
Thread.Sleep(100);
}
timePaused.Reset();
timePaused.Start();
Debugger.Break();
timePaused.Stop();
Console.WriteLine("Paused for " + timePaused.ElapsedMilliseconds + "ms.");
Thread.Sleep(5000); // Give it a chance to realise it's disconnected.
}
Console.WriteLine("Adapter is disconnected!");
Console.ReadLine();
}
E l'output:
Adapter is still connected
Paused for 10725ms.
Adapter is still connected
Paused for 13298ms.
Adapter is still connected
Paused for 32005ms.
Adapter is still connected
Paused for 59268ms.
Adapter is disconnected!
Sembra promettente, grazie, ci provo io – AlexC
Sentiti libero di tornare qui e dirci se ha funzionato. :) – bitbonk
Hai anche bisogno di GetCurrentThreadId() in modo da non sospenderti. La situazione di stallo casuale è abbastanza probabile, non assegnare nulla. –