ChannelReader
ChannelReader<T> ile kanaldan okumayı öğrenirsin.
ChannelReader<T>
ChannelReader<T>, kanalın tüketici yüzüdür. ReadAsync() tek öğeyi zaman uyumsuz okur; kanal boşsa ve tamamlanmadıysa bekler. TryRead(out T item) anında dener.
ReadAllAsync() ise bir IAsyncEnumerable<T> döndürür; await foreach ile kanal tamamlanana kadar tüm öğeleri akıtırsın. Bu, en yaygın tüketim desenidir.
await foreach ile tüket
await foreach (var item in channel.Reader.ReadAllAsync()) kalıbı, kanaldan tüm öğeleri sırayla tüketir. Kanal tamamlanınca (Writer.Complete()) döngü zarif biçimde sonlanır.
Bu, üretici-tüketici akışında kaybolan öğe olmamasını sağlar. Döngü gövdesinde öğeyi işler, filtreler veya bir koleksiyona eklersin. Tamamlanmamış bir kanalda döngü, yeni öğeler geldikçe devam eder.
Uygulama Yaz ve oku
channel sınırsız bir string kanalıdır. await channel.Writer.WriteAsync ile üç öğe yaz ("a", "b", "c"). Sonra for döngüsünde üç kez await channel.Reader.ReadAsync() ile okuyup her öğeyi yazdır. Main metodunu async Task yap.
Örnek çözümü göster
Üç kez await channel.Writer.WriteAsync(...) çağır. Sonra for (int i = 0; i < 3; i++) { var item = await channel.Reader.ReadAsync(); 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");
for (int i = 0; i < 3; i++)
{
var item = await channel.Reader.ReadAsync();
Console.WriteLine(item);
}
}
}
Kendini test et
-
ReadAsync çağrısını tamamla
var item = await channel.Reader.____;Cevabı göster
var item = await channel.Reader.ReadAsync(); -
Okuma metotlarını eşleştir
- ReadAsync
- Tek öğe zaman uyumsuz oku
- TryRead
- Anında dene, bool döndür
- ReadAllAsync
- Tüm akışı oku
-
ChannelReader ile tüm öğeleri akış olarak okumak için hangi metot kullanılır?
- ReadAll
- ReadAllAsync
- ReadEverything
- ReadStream
Cevabı göster
ReadAllAsync — Doğru. ReadAllAsync tüm akışı döndürür.