【发布时间】:2017-03-27 20:41:25
【问题描述】:
我有一个BlockingCollection 的整数。
下面是我正在尝试开发的代码,用于同时从 BlockingCollection 中删除项目。
static void Produce()
{
for (int i = 0; i < 100000; i++)
{
bc3.Add(i);
}
Run();
}
static void Run()
{
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(Process, TaskCreationOptions.LongRunning);
}
}
static void Process()
{
var stopWatch = new Stopwatch();
stopWatch.Start();
while (bc3.Count!= 0)
{
bc3.Take();
}
stopWatch.Stop();
Console.WriteLine("Thread {0}",
Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Elapsed Time {0}", stopWatch.Elapsed.Seconds);
}
这是通过创建 5 个任务以更快的方式删除项目的正确方法吗?
【问题讨论】:
-
5 个任务?在我的机器上需要 16 毫秒。任务 1 甚至在 Windows 能够启动任何其他线程之前清理集合。
-
您的代码似乎假定所有项目在您开始删除之前都已添加到集合中。如果是这种情况,那么 ConcurrentQueue 将比 BlockingCollection 执行得更好
标签: c# multithreading multitasking blockingcollection