public void PersistInFile() { var stateMachine = new PersistableStateMachine(); var invoker = new Invoker(stateMachine); invoker.Faulted += (sender, args) => { this.SerializeToFile(stateMachine); }; invoker.Completed += (sender, args) => { Assert.Fail("1st run should result in an exception."); }; invoker.Invoke().Wait(); Thread.Sleep(1000); //2nd Run var sm = this.DeserializeFromFile(); invoker = new Invoker(sm); invoker.Faulted += (sender, args) => { Assert.Fail("2nd run should not result in an exception."); }; invoker.Completed += (sender, args) => { //start state should only runned once Assert.AreEqual(1, ((PersistableStateMachine)args.StateMachine).InvokingCountOfState1); }; invoker.Invoke().Wait(); }
private void SerializeToFile(PersistableStateMachine stateMachine) { var formatter = new BinaryFormatter(); var stream = new FileStream("temp.bin", FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, stateMachine); stream.Close(); }