npantarhei.runtime.patterns.AutoResetJoin.Process C# (CSharp) Method

Process() public method

public Process ( int inputIndex, object inputData, System.Guid correlationId, Action continueOnJoin ) : void
inputIndex int
inputData object
correlationId System.Guid
continueOnJoin Action
return void
        public void Process(int inputIndex, object inputData, Guid correlationId, Action<List<object>> continueOnJoin)
        {
            var bucket = Get_bucket(correlationId);

            bucket.InputQueues[inputIndex].Enqueue(inputData);

            if (bucket.Is_ready_to_join())
            {
                continueOnJoin(bucket.Join_inputs());
                if (bucket.Is_empty()) _buckets.Remove(correlationId);
            }
        }

Usage Example

        public void Multiple_correlationIds()
        {
            var sut = new AutoResetJoin(2);

            List<object> result = null;
            Action<List<object>> onJoin = _ => result = _;

            var corrId1 = Guid.NewGuid();
            var corrId2 = Guid.NewGuid();

            sut.Process(0, "a", corrId1, onJoin);
            sut.Process(0, "x", corrId2, onJoin);
            sut.Process(1, 1, corrId1, onJoin);
            Assert.That(new object[] { "a", 1 }, Is.EqualTo(result));

            sut.Process(1, 10, corrId2, onJoin);
            Assert.That(new object[] { "x", 10 }, Is.EqualTo(result));

            sut.Process(0, "b", corrId1, onJoin);
            sut.Process(1, 11, corrId2, onJoin);
            sut.Process(1, 2, corrId1, onJoin);
            Assert.That(result, Is.EqualTo(new object[] { "b", 2 }));

            sut.Process(0, "y", corrId2, onJoin);
            Assert.That(result, Is.EqualTo(new object[] { "y", 11 }));
        }
All Usage Examples Of npantarhei.runtime.patterns.AutoResetJoin::Process