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 }
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 }