TryTake
TryTake у
ConcurrentBag
не обещает порядок: не утверждаем,
что вернётся именно 1 или 2.
Пустой мешок даёт false.
Тип безопасен для нескольких потоков;
примеры - один поток, без печати
конкретного значения элемента.
Синтаксис
bool ok = bag.TryTake(out T item);
Пример
Давайте два раза успешно забрать элемент:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentBag<int> bag = new ConcurrentBag<int>();
bag.Add(1);
bag.Add(2);
bool first = bag.TryTake(out _);
bool second = bag.TryTake(out _);
Console.WriteLine(first);
Console.WriteLine(second);
}
}
Результат выполнения кода:
True
True
Пример
Давайте проверить IsEmpty после двух TryTake:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentBag<int> bag = new ConcurrentBag<int>();
bag.Add(1);
bag.Add(2);
bag.TryTake(out _);
bag.TryTake(out _);
Console.WriteLine(bag.IsEmpty);
}
}
Результат выполнения кода:
True
Пример
Давайте вызвать TryTake для пустого мешка:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentBag<int> bag = new ConcurrentBag<int>();
bool res = bag.TryTake(out _);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
Add,
положить в мешок -
ConcurrentBag,
класс мешка -
TryPop,
снятие со стопки -
TryDequeue,
снятие из очереди