Web サービスにアクセスして値を返す一連のスレッドを作成しています。各スレッドに threading.timer を追加し、threading.timer のタイムアウト タイマーが超過した場合に、スレッドが使用するリソースの割り当てを解除しようとしました。
ここで私がそれをした方法。
class ThreadTest
{
System.Threading.Timer ThreadTimeoutTimer = null;
private void ThreadStartMain()
{
ParameterizedThreadStart start = new ParameterizedThreadStart(new ThreadTest().ReadData);
Thread t = new Thread(start);
t.Start();
}
public void ReadData(object stat)
{
int _timeOutTimer = 60000;
Thread currentThread = Thread.CurrentThread;
ThreadTimeoutTimer = new System.Threading.Timer(ReleaseThread, currentThread, _timeOutTimer, Timeout.Infinite);
webservcieclient webcl = new webservcieclient();
webcl.GetData();
ThreadTimeoutTimer = null;
UpdateDB();
}
private void ReleaseThread(object state)
{
Thread runningThread = (Thread)state;
if (runningThread.IsAlive)
{
runningThread.Abort();
}
}
}
それがどのように機能するかを確認するために、webservcieclient がタイムアウト時間を超えているようにしました。その後、タイマーが起動し、スレッドを中止します。
しかし、私が見たのは、webservcieclient がネットワーク/http 例外の後に返され、実行され、スレッドが中止されたことを示す別の例外をスローすることです。また、UpdateDB() が 2 回実行されました。スレッドがすでに中止されたためにどのように実行されたか。Web サービスのメソッドにアクセスしているときに別のスレッドが開始されたためですか?