我有一个程序可以检查网站的货物状态。
由于我以前没有学过线程,所以我只是在我的程序中使用 system.threading.timer。
我有一个 system.threading.timer 列表和一些 system.threading.timer
List<system.threading.timer> _timerList;
System.threading.timer _timerA;
System.threading.timer _timerB;
System.threading.timer _timerC;
我打电话给_timerA检查货物状态,并在货物结束时打电话给_timerList购买带有 10 个帐户的帐户列表的商品。
我每 500 毫秒执行_timerA。
_timerA = new System.Threading.Timer(new TimerCallback(submit_checkgoods), 0, 0, 500);
在submit_checkgoods内部(之前调用了_timerList.Add(...(:
if ( goodsIsUp == true)
{
for (int k = 0; k < infolistbb.Count; k++)
{
int copy = k;
_timerList[copy] = new System.Threading.Timer(new TimerCallback(submit_buygoods), copy, 0, 0);
}
}
问题是我发现调用_timerlist[copy]来执行非常慢。
我用秒表检查调用_timerlist执行到submit_buygoods结束的时间和执行submit_buygoods的时间。
submit_buygoods的执行非常快,但调用过程就像一个接一个。
_timerList[0] 完成执行submit_buygoods后,_timerList[1] 然后继续。
当线程太多(实际上只有大约 15 个(时,这是 System.threading.timer 的缺陷吗?
原因是什么?有什么补救措施吗?切换到线程 t = new Thread(( 会有帮助吗?
使用任务而不是线程,它们更适合短期作业。
Task.Factory.StartNew(submit_buygoods);
附言也许你不应该每500毫秒敲一次服务器,你可能会被禁止你的IP。