Ich habe gesehen, dass Concurrent tatsächlich eine sichere Thread-Sammlung ist, aber in welchen Fällen kann sie hilfreich sein?
Ich habe zwei Beispiele erstellt und das Ergebnis ist das gleiche
Zuerst die ConcurrentQueue:
Code: Select all
static ConcurrentQueue queue = new ConcurrentQueue();
private static readonly object obj = new object();
static int i = 0;
static int Num = 0;
static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
queue.TryDequeue(out Num);
Console.WriteLine($"{Num} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
Code: Select all
static Queue queue = new Queue();
private static readonly object obj = new object();
static int i = 0;
static void Run(object loopNum)
{
lock (obj)
{
for (int N = 0; N < 10; N++)
{
queue.Enqueue (i);
Thread.Sleep(250);
Console.WriteLine($"{queue.Dequeue()} Added! in {loopNum} Loop, ThreadID: [{Thread.CurrentThread.ManagedThreadId}]");
i++;
}
}
}
Code: Select all
static void Main()
{
Thread[] Th = new Thread[] { new Thread(Run), new Thread(Run) };
Th[0].Start("First");
Th[1].Start("Second");
Console.ReadKey();
}
Sicher, es gibt einige verschiedene Methoden wie TryDequeue und ein paar mehr, aber wofür ist es wirklich hilfreich?
Jede Hilfe wird sehr geschätzt
Mobile version