public void RaiseIfSetValueFromTwoTransactions() { Machine machine = new Machine(); TransactionalReference reference = new TransactionalReference(); reference.SetValue("foo"); Assert.AreEqual("foo", reference.GetValue()); Transaction transaction1 = new Transaction(machine); Transaction transaction2 = new Transaction(machine); reference.SetValue("bar", transaction1); reference.SetValue("newbar", transaction2); transaction1.Complete(); transaction2.Complete(); }
public void Execute(IBindingEnvironment environment) { if (Machine.CurrentTransaction != null) { this.command.Execute(environment); return; } using (Transaction trans = new Transaction(Machine.Current)) { Machine.CurrentTransaction = trans; this.command.Execute(environment); Machine.CurrentTransaction = null; trans.Complete(); } }
public void SetAndGetValueUsingTwoTransactions() { Machine machine = new Machine(); TransactionalReference reference = new TransactionalReference(); reference.SetValue("foo"); Assert.AreEqual("foo", reference.GetValue()); Transaction transaction1 = new Transaction(machine); Transaction transaction2 = new Transaction(machine); reference.SetValue("bar", transaction1); Assert.AreEqual("foo", reference.GetValue(transaction2)); Assert.AreEqual("bar", reference.GetValue(transaction1)); transaction1.Complete(); transaction1.Dispose(); Assert.IsTrue(reference.HasSnapshots); Assert.AreEqual("bar", reference.GetValue()); Assert.AreEqual("foo", reference.GetValue(transaction2)); transaction2.Dispose(); Assert.IsFalse(reference.HasSnapshots); }