アプリにバグがあり、デバッガーでアプリを数分間一時停止した場合にのみ顔が表示されるようです。これは、ハートビートスレッドを使用しているサードパーティのネットワークライブラリが原因であると思われます。ハートビートスレッドが一時停止しているときにサーバーにpingを実行できないと、サーバーが切断されます。
これがバグの原因であることを確認するために、このためのテストケースアプリを作成しようとしています。そのためには、アプリ内のすべてのスレッドを一時停止して(後で、ハートビートスレッドであると思われるスレッドのみを一時停止するように絞り込みます)、デバッガーでアプリの一時停止をシミュレートする方法が必要です。
誰かがこれを行う方法を知っていますか?あるスレッドが別のスレッドをスリープ状態にすることさえ可能ですか?
ありがとう、アレックス
アップデート:
デバッガーで一時停止したために切断が発生したことを確認するだけでよいので、これを行うためのアプリは本当に必要ないと判断しました。だから、これが私がしたことです...(最も単純な方法がしばしば最良です...または少なくとも最も単純です...)
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!