Tengo un error en mi aplicación que parece mostrarlo solo cuando pause la aplicación en el depurador durante unos minutos. Sospecho que esto se debe a una biblioteca de red de un tercero que estoy usando con un hilo de latido, que se desconecta cuando no puede hacer ping al servidor mientras se detiene el hilo del latido.Pausa de todos los hilos en el proceso actual en tiempo de ejecución
Estoy tratando de escribir una aplicación de caso de prueba para verificar que esta es la causa del error. Para hacerlo, necesito una forma de pausar todos los hilos en la aplicación (que luego reduciré a pausar solo el hilo que sospecho que puede ser el hilo del latido) para simular la pausa de la aplicación en el depurador.
¿Alguien sabe cómo hacer esto? ¿Es posible que un hilo haga que otro duerma?
Gracias, Alex
ACTUALIZACIÓN:
terminé decidiendo que realmente no necesita una aplicación para hacer esto por mí, ya que el objetivo era sólo para comprobar que haciendo una pausa en el depurador estaba causando la desconexión. Por lo tanto, esto es lo que hice ... (Las formas más simples son a menudo la mejor ... o al menos la más simple ...)
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();
}
Y la salida:
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!
Parece prometedor, gracias, lo intentaré – AlexC
No dude en volver aquí y decirnos si funcionó. :) – bitbonk
También necesita GetCurrentThreadId() para que no se suspenda. El punto muerto aleatorio es bastante probable, no asignen nada. –