Exemple #1
0
 private void Deserialize(BlockingPipelineStream stream, List <IAnimal> animals)
 {
     lock (stream.ReadSync)
     {
         animals.Add(Serializer.DeserializeWithLengthPrefix <IAnimal>(stream, PrefixStyle.Fixed32BigEndian));
     }
 }
Exemple #2
0
 private void Serialize(BlockingPipelineStream stream, int index)
 {
     lock (stream.WriteSync)
     {
         Serializer.SerializeWithLengthPrefix(stream, _animals[index], PrefixStyle.Fixed32BigEndian);
     }
 }
Exemple #3
0
        public void ReadWrite_OnMultipleThreads_ShouldWork(int writeTasksCount, int readTasksCount, bool notTimedOutExpected, bool zeroLenghtExpected)
        {
            // Assign
            var stream     = new BlockingPipelineStream();
            var writeTasks = Enumerable.Range(1, writeTasksCount)
                             .Select(i => new Task(() => stream.Write(CreateRandomBytes(i * 10), 0, i * 10), TaskCreationOptions.LongRunning))
                             .ToList();
            var readTasks = Enumerable.Range(1, readTasksCount)
                            .Select(i => new Task(() => stream.Read(new byte[i * 10], 0, i * 10), TaskCreationOptions.LongRunning))
                            .ToList();

            // Act
            readTasks.ForEach(x => x.Start());
            writeTasks.ForEach(x => x.Start());
            var tasks       = writeTasks.Concat(readTasks).ToArray();
            var notTimedOut = Task.WaitAll(tasks, 1000);

            // Assert
            Assert.Equal(notTimedOutExpected, notTimedOut);
            Assert.Equal(zeroLenghtExpected, stream.Length == 0);
        }
Exemple #4
0
        public void ReadWrite_WithProtocolBuffers_ShouldWork(int writeTasksCount, int readTasksCount, bool notTimedOutExpected, int animalsExpected)
        {
            // Assign
            var stream     = new BlockingPipelineStream();
            var animals    = new List <IAnimal>();
            var writeTasks = Enumerable.Range(0, writeTasksCount)
                             .Select(i => new Task(() => Serialize(stream, i), TaskCreationOptions.LongRunning))
                             .ToList();
            var readTasks = Enumerable.Range(0, readTasksCount)
                            .Select(i => new Task(() => Deserialize(stream, animals), TaskCreationOptions.LongRunning))
                            .ToList();

            // Act
            readTasks.ForEach(x => x.Start());
            writeTasks.ForEach(x => x.Start());
            var tasks       = writeTasks.Concat(readTasks).ToArray();
            var notTimedOut = Task.WaitAll(tasks, 1000);

            // Assert
            Assert.Equal(notTimedOutExpected, notTimedOut);
            Assert.Equal(animalsExpected, animals.Count);
        }