如何使用c#任务进行可重复的工作?

时间:2016-11-01 12:33:24

标签: c# multithreading task

我使用sharpPacp接收udp数据包,当打包到达时,我使用BackgroundThread来处理收到的打包如下:

private void BackgroundThread()
{
    while (!BackgroundThreadStop)
    {
        bool shouldSleep = true;

        lock (QueueLock)
        {
            if (PacketQueue.Count != 0)
            {
                shouldSleep = false;
            }
        }

        if (shouldSleep)
        {
            System.Threading.Thread.Sleep(250);
        }
        else // should process the queue
        {
            //List<RawCapture> ourQueue;
            List<UdpPacket> ourQueue;
            lock (QueueLock)
            {
                // swap queues, giving the capture callback a new one
                ourQueue = PacketQueue;
                PacketQueue = new List<UdpPacket>();
            }

           //I write my repeatable work in here
            Task.Factory.StartNew(() =>
           {
               ProcePacket(ourQueue);
           });

            if (statisticsUiNeedsUpdate)
            {
                UpdateCaptureStatistics();
                statisticsUiNeedsUpdate = false;
            }
        }
    }
}

其中ProcePacket(ourQueue)是一个需要很长时间才能完成的。 我的程序运行了一段时间,然后cpu几乎使用了98%,内存增加到很多,最后它死了。 我认为问题是我创建了太多任务,但是如何只用一个任务进行可重新编写的工作呢?

0 个答案:

没有答案