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