0

我有一个检查网站商品状态的程序。

因为我以前没有学习过线程,所以我只是在我的程序中使用 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() 会有帮助吗?

4

1 回答 1

3

使用任务而不是线程,它们更适合短期工作。

Task.Factory.StartNew(submit_buygoods);

PS 也许你不应该每 500 毫秒就敲一次服务器,你可能会禁止你的 IP。

于 2013-10-01T14:27:09.023 回答