Свойство Completion
ChannelReader.Completion становится
завершённой после
Complete
и опустошения очереди. Свойство
IsCompleted у этой задачи
показывает, что читать больше нечего.
Синтаксис
Task done = reader.Completion;
await reader.Completion;
Пример
Давайте проверить IsCompleted после
Complete на пустом канале:
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
Пример
Давайте дождаться Completion через
await:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
channel.Writer.Complete();
await channel.Reader.Completion;
bool res = channel.Reader.Completion.IsCompletedSuccessfully;
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>();
await channel.Writer.WriteAsync(1);
channel.Writer.Complete();
await channel.Reader.ReadAsync();
await channel.Reader.Completion;
bool res = channel.Reader.Completion.IsCompleted;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
Complete,
закрыть запись -
метод
ReadAllAsync,
дочитать до конца -
метод
ReadAsync,
снять элементы -
ChannelReader,
класс, где объявлено свойство