У меня есть ошибка в моем приложении, которая, кажется, показывает лицо, только когда я приостанавливаю приложение в отладчике в течение нескольких минут. Я подозреваю, что это связано с сторонней сетевой библиотекой, в которой я использую поток прерываний, который отключается, когда он не может пинговать сервер, пока поток прерываний прерывается.Приостановка всех потоков в текущем процессе во время выполнения
Я пытаюсь написать приложение для проверки, чтобы убедиться, что это является причиной ошибки. Чтобы сделать это, мне нужен способ приостановить все потоки в приложении (которое я позже сужу, чтобы приостановить только поток, который, как я подозреваю, может быть потоком heartbeat), чтобы имитировать приостановку приложения в отладчике.
Кто-нибудь знает, как это сделать? Возможно ли, чтобы один поток заставлял другого спать?
Спасибо, Alex
UPDATE:
я в конечном итоге, решив, что я действительно не нужно приложение, чтобы сделать это для меня, видя, как дело было просто проверить, что паузы в отладчике вызвало разъединение. Итак, вот что я сделал ... (Простейшие способы часто являются лучшим ... или, по крайней мере, самый простой ...)
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();
}
И выход:
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!
Выглядит многообещающе, спасибо, я дам ему – AlexC
Не стесняйтесь возвращаться сюда и рассказывать нам, если это сработало. :) – bitbonk
Вам также нужен GetCurrentThreadId(), чтобы вы не приостанавливали себя. Случайный тупик вполне вероятен, ничего не выделяйте. –