আমি এই প্রশ্নে পৌঁছেছি একটি ওপেনের অবজেক্টের তালিকাটি স্ট্রিম করার জন্য System.IO.Stream
এবং অন্য প্রান্তে পাঠানোর আগে পুরো তালিকায় বাফারিং ছাড়াই সেগুলি পড়তে চাই looking (বিশেষত আমি মঙ্গোডিবি থেকে ওয়েব এপিআইয়ের মাধ্যমে স্থির অবজেক্টগুলি স্ট্রিম করছি)
@ পোল টাইং এবং @ রিভার্স মূল প্রশ্নের উত্তর দেওয়ার জন্য দুর্দান্ত কাজ করেছিলেন এবং আমি তাদের উত্তরগুলি আমার সমস্যার জন্য ধারণার প্রমাণ তৈরি করতে ব্যবহার করেছি। অন্য কেউ যদি একই সমস্যার মুখোমুখি হয় তবে আমি এখানে আমার পরীক্ষার কনসোল অ্যাপটি পোস্ট করার সিদ্ধান্ত নিয়েছি।
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace TestJsonStream {
class Program {
static void Main(string[] args) {
using(var writeStream = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.None)) {
string pipeHandle = writeStream.GetClientHandleAsString();
var writeTask = Task.Run(() => {
using(var sw = new StreamWriter(writeStream))
using(var writer = new JsonTextWriter(sw)) {
var ser = new JsonSerializer();
writer.WriteStartArray();
for(int i = 0; i < 25; i++) {
ser.Serialize(writer, new DataItem { Item = i });
writer.Flush();
Thread.Sleep(500);
}
writer.WriteEnd();
writer.Flush();
}
});
var readTask = Task.Run(() => {
var sw = new Stopwatch();
sw.Start();
using(var readStream = new AnonymousPipeClientStream(pipeHandle))
using(var sr = new StreamReader(readStream))
using(var reader = new JsonTextReader(sr)) {
var ser = new JsonSerializer();
if(!reader.Read() || reader.TokenType != JsonToken.StartArray) {
throw new Exception("Expected start of array");
}
while(reader.Read()) {
if(reader.TokenType == JsonToken.EndArray) break;
var item = ser.Deserialize<DataItem>(reader);
Console.WriteLine("[{0}] Received item: {1}", sw.Elapsed, item);
}
}
});
Task.WaitAll(writeTask, readTask);
writeStream.DisposeLocalCopyOfClientHandle();
}
}
class DataItem {
public int Item { get; set; }
public override string ToString() {
return string.Format("{{ Item = {0} }}", Item);
}
}
}
}
মনে রাখবেন যে AnonymousPipeServerStream
নিষ্পত্তি করার সময় আপনি একটি ব্যতিক্রম পেতে পারেন, এটি এহেন সমস্যার সাথে প্রাসঙ্গিক না বলে আমি এটিকে উপেক্ষা করেছি।