Пример #1
0
        public void ReceiveStructByValue()
        {
            var      c      = new STClass();
            var      s      = new STStruct(123, c);
            STStruct result = default(STStruct);

            using (var p = Pipeline.Create("ReceiveClassByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var emitter  = p.CreateEmitter <STStruct>(this, "emitter");
                var receiver = p.CreateReceiver <STStruct>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                emitter.PipeTo(receiver, DeliveryPolicy.Unlimited);
                p.RunAsync();
                emitter.Post(s, DateTime.MinValue);
            }

            Assert.AreEqual(result.Value, 123);
            Assert.IsTrue(result.Reference.Same(c));
            Assert.AreNotEqual(result.Reference, c); // we expect a different instance
        }
Пример #2
0
        public void ReceiveStructByRef()
        {
            var      c      = new STClass();
            var      s      = new STStruct(123, c);
            STStruct result = default(STStruct);

            using (var p = Pipeline.Create("ReceiveStructByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var receiver = p.CreateReceiver <STStruct>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                Generators.Return(p, s).PipeTo(receiver, immediate);
                p.Run();
            }

            Assert.AreEqual(result.Value, 123);
            Assert.AreEqual(result.Reference, c); // we expect the same instance
        }