Метод TryRead
ChannelReader.TryRead из пустого
канала возвращает false и не
бросает. С ожиданием -
ReadAsync.
Запись без ожидания -
TryWrite.
Синтаксис
bool ok = reader.TryRead(out int item);
Пример
Давайте прочитать из пустого канала:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
bool res = channel.Reader.TryRead(out _);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Пример
Давайте снять записанное 1:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.TryWrite(1);
bool ok = channel.Reader.TryRead(out int item);
Console.WriteLine(ok);
Console.WriteLine(item);
}
}
Результат выполнения кода:
True
1
Пример
Давайте дважды прочитать, когда в очереди один элемент:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.TryWrite(1);
channel.Reader.TryRead(out _);
bool res = channel.Reader.TryRead(out _);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
метод
ReadAsync,
ждать элемент -
метод
TryWrite,
запись без ожидания -
ChannelReader,
класс, где объявлен метод -
Channel,
очередь между задачами