我正在创建一组线程来访问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()运行了两次。 它是如何运行的,因为线程已经中止。是否因为访问Web服务方法时启动了另一个线程?
你使用哪个框架类来调用web服务?它是'WebClient'吗? – dcastro
是的。其Web服务客户端。 – FatalError
您能向我们展示您实际执行Web请求的行吗? – dcastro