मैं .NET मानक 2.1 पूर्वावलोकन 8 का उपयोग कर रहा हूं। मैं एक छोटा प्रोग्राम बनाता हूं जो अनिवार्य रूप से टीसीपी सॉकेट से लिखता/पढ़ता है। रीडिंग Pipe के साथ की जाती है।

निम्नलिखित कार्यान्वयन को देखते हुए

var pipe = new Pipe();

await pipe.Writer.WriteAsync(new ReadOnlyMemory<byte>(new byte[100]));
await pipe.Writer.FlushAsync();

while (true)
{
    var readResult = await pipe.Reader.ReadAsync();
    if (readResult.Buffer.Length <= 0)
        break;

    Console.WriteLine("Buffer length:" + readResult.Buffer.Length);
    Console.WriteLine("Buffer start:" + readResult.Buffer.Start.GetInteger());

    var position = readResult.Buffer.GetPosition(10);
    Console.WriteLine("End position:" + position.GetInteger());
    Console.WriteLine();

    pipe.Reader.AdvanceTo(position);
}

यह परिदृश्य PipeWriter को १०० बाइट्स लिखता है। फिर लूप में बफर पढ़ा जाता है और रीडर 10 बाइट्स से आगे बढ़ता है।

यह निम्नलिखित आउटपुट उत्पन्न करता है:

Buffer length:100
Buffer start:0
End position:10

Buffer length:90
Buffer start:10
End position:20

Buffer length:80
Buffer start:20
End position:30

Buffer length:70
Buffer start:30
End position:40

Buffer length:60
Buffer start:40
End position:50

Buffer length:50
Buffer start:50
End position:60

Buffer length:40
Buffer start:60
End position:70

Buffer length:30
Buffer start:70
End position:80

Buffer length:20
Buffer start:80
End position:90

Buffer length:10
Buffer start:90
End position:100

मुझे समझ में नहीं आता क्यों बफर शुरू होता है और स्थिति प्रत्येक पुनरावृत्ति 10 से आगे बढ़ती है। मैं एक पाइप पर पढ़ने के बाद उम्मीद करता हूं कि प्रत्येक पुनरावृत्ति के लिए बफर प्रारंभ 0 है और जब मुझे 10 की ऑफसेट के साथ स्थिति मिलती है तो स्थिति 10 होगी। केवल बफर आकार प्रत्येक पुनरावृत्ति में 10 से कम होना चाहिए।

क्या कोई बग है या स्थिति को किसी अन्य तरीके से परिभाषित किया गया है?

3
Christian Klemm 28 अगस्त 2019, 20:15

1 उत्तर

सबसे बढ़िया उत्तर

पता चलता है कि SequencePosition.GetInteger() को आंतरिक उपयोग के लिए माना जाता है। SequenceReader (जैसा कि प्रस्तावित है यहां) का इस्तेमाल करना मेरे लिए कारगर रहा।

चूंकि SequenceReader मानक I में उपलब्ध नहीं है, इसलिए यह मुद्दा भरा है।

2
Christian Klemm 31 अगस्त 2019, 16:14