public void SendOperationsEnlistInTheSameTransactionContext(bool commitTransaction) { var receivedMessages = new ConcurrentQueue<string>(); var bus = _activator.Bus.Advanced.SyncBus; _activator.Handle<string>(async msg => receivedMessages.Enqueue(msg)); using (var context = new DefaultSyncTransactionContextScope()) { bus.SendLocal("hej med dig min ven"); bus.SendLocal("her er endnu en besked"); if (commitTransaction) { context.Complete(); } } Thread.Sleep(500); if (commitTransaction) { Assert.That(receivedMessages, Contains.Item("hej med dig min ven")); Assert.That(receivedMessages, Contains.Item("her er endnu en besked")); } else { Assert.That(receivedMessages.Count, Is.EqualTo(0)); } }
public void SendOperationsEnlistInTheSameTransactionContext(bool commitTransaction) { var receivedMessages = new ConcurrentQueue <string>(); var bus = _activator.Bus.Advanced.SyncBus; _activator.Handle <string>(async msg => receivedMessages.Enqueue(msg)); using (var context = new DefaultSyncTransactionContextScope()) { bus.SendLocal("hej med dig min ven"); bus.SendLocal("her er endnu en besked"); if (commitTransaction) { context.Complete(); } } Thread.Sleep(500); if (commitTransaction) { Assert.That(receivedMessages, Contains.Item("hej med dig min ven")); Assert.That(receivedMessages, Contains.Item("her er endnu en besked")); } else { Assert.That(receivedMessages.Count, Is.EqualTo(0)); } }
public void DoesNotBlockOnCompletingTransactionContext() { var bus = _activator.Bus.Advanced.SyncBus; var gotMessage = new ManualResetEvent(false); _activator.Handle <string>(async str => gotMessage.Set()); using (var aspNet = new AspNetSimulatorSynchronizationContext()) { aspNet.Post(s => { using (var context = new DefaultSyncTransactionContextScope()) { var transactionContext = AmbientTransactionContext.Current; try { // enlist some other async thing transactionContext.OnCommitted(async() => { Console.WriteLine("waiting...."); await Task.Delay(100); Console.WriteLine("waiting...."); await Task.Delay(100); Console.WriteLine("waiting...."); await Task.Delay(100); }); // enlist an operation in the context bus.SendLocal("HEJ MED DIG MIN VEN"); context.Complete(); } finally { AmbientTransactionContext.SetCurrent(null); } } }, null); gotMessage.WaitOrDie(TimeSpan.FromSeconds(3)); } }