Kanal tamamlama
Channel.Writer.Complete ve Completion ile kanalı kapatmayı öğrenirsin.
Kanal tamamlama
Writer.Complete(), kanala artık öğe gelmeyeceğini bildirir. Tüketici, kalan öğeleri okuduktan sonra ReadAllAsync akışı zarif biçimde sonlanır.
Reader.Completion ise bir Task'tır; kanal tamamen bittiğinde tamamlanır. Bekleyen tüketici bununla sonlanabilir. Hata ile kapatmak için Writer.TryComplete(exception) kullanılır. Bu, akışta bir üretim hatasını tüketiciye iletmeyi sağlar.
Zarif kapanış
Üretici Writer.Complete() çağırdıktan sonra, await foreach (var item in channel.Reader.ReadAllAsync()) döngüsü kalan öğeleri tüketir ve sonra biter. Bu, kanalı kapatırken veri kaybı olmadığını garanti eder.
Tüketici tarafta await channel.Reader.Completion ile kanalın tamamen bittiğini bekleyebilirsin; özellikle birden çok kanalı senkronize ederken yararlıdır.
Uygulama Complete ile akışı kapat
channel sınırsız bir string kanalıdır. await channel.Writer.WriteAsync ile üç öğe ("a", "b", "c") yaz. Sonra channel.Writer.Complete() çağır. En son await foreach (var item in channel.Reader.ReadAllAsync()) ile tüm öğeleri yazdır. Main metodunu async Task yap.
Örnek çözümü göster
Üç kez await channel.Writer.WriteAsync(...) çağır, channel.Writer.Complete(); çağır, sonra await foreach (var item in channel.Reader.ReadAllAsync()) Console.WriteLine(item);
Örnek çözüm:
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var channel = Channel.CreateUnbounded<string>();
await channel.Writer.WriteAsync("a");
await channel.Writer.WriteAsync("b");
await channel.Writer.WriteAsync("c");
channel.Writer.Complete();
await foreach (var item in channel.Reader.ReadAllAsync())
{
Console.WriteLine(item);
}
}
}
Kendini test et
-
Tamamlama metotlarını eşleştir
- Writer.Complete()
- Yazmayı bitir
- Reader.Completion
- Kanalın bitiş Task'ı
- TryComplete(exception)
- Hata ile kapat
-
Complete çağrısını tamamla
channel.Writer.____;Cevabı göster
channel.Writer.Complete(); -
Kanala artık öğe yazılmayacağını bildirmek için hangi metot çağrılır?
- Writer.Complete()
- Writer.Close()
- Writer.Finish()
- Reader.Complete()
Cevabı göster
Writer.Complete() — Doğru. Writer.Complete() yazmayı bitirir.