我有一个检查网站商品状态的程序。
由于我之前没有学过线程,我只是在我的程序中使用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的缺陷吗?
原因是什么?任何补救措施?切换到Thread t = new Thread()会有帮助吗?
答案 0 :(得分:3)
使用Task而不是Thread,它们更适合短期工作。
Task.Factory.StartNew(submit_buygoods);
P.S。也许你不应该每500毫秒敲击服务器,你可能会被禁止你的IP。