public void DoesNotBlockOnSend() { var bus = _activator.Bus.Advanced.SyncBus; var gotMessage = new ManualResetEvent(false); _activator.AddHandlerWithBusTemporarilyStopped <string>(async str => gotMessage.Set()); using (var aspNet = new AspNetSimulatorSynchronizationContext()) { aspNet.Post(s => { bus.SendLocal("HEJ MED DIG MIN VEN"); }, null); gotMessage.WaitOrDie(TimeSpan.FromSeconds(3)); } }
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)); } }