Метод Complete
ChannelWriter.Complete запрещает
новые записи. TryWrite после этого
даёт false. Задача
Completion
завершится, когда данные прочитаны.
Пустой
ReadAsync
бросает ChannelClosedException.
Синтаксис
writer.Complete();
writer.Complete(error);
Пример
Давайте прочитать элемент после
Complete:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
await channel.Writer.WriteAsync(1);
channel.Writer.Complete();
int res = await channel.Reader.ReadAsync();
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте проверить Completion.IsCompleted
на пустом канале:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
bool res = channel.Reader.Completion.IsCompleted;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте поймать закрытие после опустошения:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
try
{
await channel.Reader.ReadAsync();
}
catch (ChannelClosedException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
свойство
Completion,
конец чтения -
метод
TryWrite,
ложь после закрытия -
метод
ReadAllAsync,
дочитать очередь -
ChannelWriter,
класс, где объявлен метод