编程语言
首页 > 编程语言> > C#-Thread.Sleep无法正常工作!

C#-Thread.Sleep无法正常工作!

作者:互联网

考虑以下在特定类的每个实例中执行的代码:

private void StartUpdateThread()
{
    runUpdateThread = true;

    Thread thread = new Thread(new ThreadStart(UpdateUsages));
    thread.Priority = ThreadPriority.BelowNormal;
    thread.Start();
}

public void UpdateUsages()
{
    DateTime updateDateTime = DateTime.Now;

    while (runUpdateThread)
    {
        if (updateDateTime <= DateTime.Now)
        {
            _cpuUsage.Add(DateTime.Now, GetCPUUsage());

            if (_cpuUsage.Count == 61)
                _cpuUsage.Remove(_cpuUsage.ElementAt(0).Key);

            _ramUsage.Add(DateTime.Now, GetRamUsage());

            if (_ramUsage.Count == 61)
                _ramUsage.Remove(_ramUsage.ElementAt(0).Key);

            updateDateTime = DateTime.Now.AddSeconds(15);
        }

        Thread.Sleep(15000);
    }
}

向每个字典添加2或3个值后,它将引发“字典中已经存在具有相同键的元素”.这应该是不可能的,因为我在每个循环之后都在进行“睡眠”.
我尝试通过添加updateDateTime变量来防止此问题,但未成功.

我的想法不多了.谁能帮助我或向我解释这是怎么发生的?

谢谢

解决方法:

_cpuUsage或_ramUsage是否是静态的?或者,也许您已经为他们两个分配了相同的值?如果您可以给我们一个简短但完整的程序来演示问题,那将使事情变得更加清楚.

附带一提,您似乎希望您使用ElementAt(0)可以从字典中删除最早的条目,但是并不能保证如此.

从您正在做的事情来看,最好使用LinkedList< Tuple< DateTime,long>>.或类似.

标签:thread-safety,c
来源: https://codeday.me/bug/20191208/2093434.html