所有していないAPIからのログオンプロセスがあり、ときどきハングします。たとえば、30秒より長くかかる場合は、それを強制終了して再試行します(2〜3秒程度しかかからないため)。
スレッドの中止がどのように機能するか、中止後に参加する必要があるかどうかについて少し混乱しています。これが私の質問とそれに続く私がやろうとしていることの例です:
質問:
Abortは、呼び出されたスレッドでスレッド中止例外をスローします。それは伝播しますか?呼び出し元のスレッドで明示的に処理する必要がありますか、それともスレッドが停止するだけですか?
中止されたスレッドに参加して、ゾンビ化しないようにする必要がありますか、それとも* NIXプログラミングの世界から混乱しているだけですか?
public static Session GetSession() { Session session = new Session("user", "pass"); try { //Create a thread to get the session so we can kill it if it hangs. Thread thread = new Thread(() => session.Logon()); //Create a thread to kill the session thread if it hangs. Thread watcher = new Thread(() => HangKill(thread)); //Start both threads. thread.Start(); watcher.Start(); //Wait for session thread to finish - abort kill thread if it does. thread.Join(); watcher.Abort(); watcher.Join(); } catch (Exception ex) { status = ex.ToString(); } return session; } public static void HangKill(Thread t) { Thread.Sleep(30); if (t.IsAlive == true) { t.Abort(); } }