1
我有下面的代码,我从源中填充用户,为了举例,如下所示。我想要做的是消费BlockingCollection与多个消费者。消费阻止具有多个任务/消费者的集合
低于正确的方式做到这一点?另外什么是最好的线程数?好吧,这将取决于硬件,内存等。或者我怎样才能以更好的方式做到这一点?
也会在下面的实现确保我会处理集合中的所有东西,直到它是空的?
class Program
{
public static readonly BlockingCollection<User> users = new BlockingCollection<User>();
static void Main(string[] args)
{
for (int i = 0; i < 100000; i++)
{
var u = new User {Id = i, Name = "user " + i};
users.Add(u);
}
Run();
}
static void Run()
{
for (int i = 0; i < 100; i++)
{
Task.Factory.StartNew(Process, TaskCreationOptions.LongRunning);
}
}
static void Process()
{
foreach (var user in users.GetConsumingEnumerable())
{
Console.WriteLine(user.Id);
}
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
如何调用cde.Signal();来自Process(),你的意思是让这个静态只读实例? – DarthVader
是的,我做了,我在这里写了代码,而不是在调试器中。我会纠正的。 –
我正在使用IO,即:从交换/ AD获取用户信息,但我有这么多的用户,我需要一些并行性,这种模式会有效吗?或者你会推荐另一种方法? – DarthVader