public void CanUseTestObserver() { const string MailBoxName = "box"; const string ErrorText = "error"; using (var mailBox = new ProcessMailBox(MailBoxName, TimeSpan.FromMilliseconds(-1))) { using (var observer = new TestObserver(MailBoxName)) { var list = new List <object>(); var taskObserve = Task.Factory.StartNew( () => { observer.OnNext(PerTestResultGenerator.CreatePerfResult()); observer.OnError(new Exception(ErrorText)); observer.OnCompleted(); }); var taskMailBox = Task.Factory.StartNew( () => { list.Add(mailBox.Content); list.Add(mailBox.Content); list.Add(mailBox.Content); }); Task.WaitAll(new[] { taskObserve, taskMailBox }, TimeSpan.FromSeconds(20)).Should().BeTrue(); list.Count.Should().Be(3); list[0].Should().Be(PerTestResultGenerator.CreatePerfResult()); list[1].Should().Be(new ExperimentError(new Exception(ErrorText))); list[2].Should().Be(new ExperimentCompleted()); } } }
public void CanSetGetMailBoxContent() { const string Content = "Content"; using (var mailBox = new ProcessMailBox("mailBox", TimeSpan.FromMilliseconds(-1))) { mailBox.Content = Content; var value = mailBox.Content; value.ShouldBeEquivalentTo(Content); } }
private static void SendError(Exception ex) { if (string.IsNullOrEmpty(channelName)) { Console.Error.WriteLine(ex.ToString()); } else { using (var mailBox = new ProcessMailBox(channelName, TimeSpan.FromSeconds(5))) { mailBox.Content = new ExperimentError(ex); } } }
private void Dispose(bool dispose) { if (this.disposed) { return; } if (dispose) { this.mailBox.Dispose(); } this.mailBox = null; this.disposed = true; }
public void CanObserveTestRunner() { var setUpCounter = 0; var testCounter = 0; var tearDownCounter = 0; const int Start = 0; const int Step = 7; const int End = 135; const string MailBoxName = "box"; using (var mailBox = new ProcessMailBox(MailBoxName, TimeSpan.FromMilliseconds(-1))) { using (var observer = new TestObserver(MailBoxName)) { var list = new List <PerfTestResult>(); var runner = new TestRunner(i => setUpCounter++, () => testCounter++, () => tearDownCounter++, i => i / 2d, Start, Step, End); var taskObserve = Task.Factory.StartNew( () => { runner.Subscribe(observer); }); var taskMailBox = Task.Factory.StartNew( () => { for (int i = Start; i < End; i += Step) { list.Add((PerfTestResult)mailBox.Content); } }); Task.WaitAll(new[] { taskObserve, taskMailBox }, TimeSpan.FromSeconds(20)).Should().BeTrue(); var count = (int)Math.Ceiling((End - Start + 1) / (double)Step); setUpCounter.Should().Be(count); testCounter.Should().Be(count); tearDownCounter.Should().Be(count); var index = 0; for (var i = Start; i < End; i += Step) { list[index++].Descriptor.Should().Be(i / 2d); } } } }
/// <summary> /// 功能描述:发送消息到指定进程ID /// 作 者:huangzh /// 创建日期:2015-08-28 16:11:41 /// 任务编号: /// </summary> /// <param name="value">非接口调用,传null</param> /// <param name="strProcessID">进程ID</param> /// <param name="objMsg">objMsg</param> public static void SendMsgToProcess <T>( this T value, string strProcessID, object objMsg) where T : IProcessMessage { try { ProcessMailBox mail = new ProcessMailBox(strProcessID, 1024, false); mail.Content = objMsg; //给读取消息留时间 Thread.Sleep(10); //清空消息 mail.ClearContent(); mail.Dispose(); } catch { throw; } }
/// <summary> /// 功能描述:从指定进程读取消息 /// 作 者:huangzh /// 创建日期:2015-08-28 16:11:59 /// 任务编号: /// </summary> /// <param name="value">非接口调用,传null</param> /// <param name="strMsgFrom">strToolProcessName</param> public static void ReadMsgFromProcess <T>(this T value, string strMsgFrom) where T : IProcessMessage { try { if (OnMsg == null) { throw new Exception("请初始化OnMsg事件"); } Thread th = new Thread(delegate() { ProcessMailBox mail = new ProcessMailBox(strMsgFrom, 1024, false); try { while (true) { if (OnMsg != null) { OnMsg(mail.Content, strMsgFrom); //防止一直读取同一消息 Thread.Sleep(20); } } } catch { } finally { mail.Dispose(); } }); th.Name = "读取夸进程消息"; th.IsBackground = true; th.Start(); } catch { throw; } }
public void CanSyncSetGetMailBoxContent() { const int N = 10; const int SecondsTimeout = 30; var list = new List <int>(); using (var mailBox = new ProcessMailBox("mailBox", TimeSpan.FromMilliseconds(-1))) { var setTask = Task.Factory.StartNew(() => { for (var i = 0; i < N; i++) { mailBox.Content = i; } }); var getTask = Task.Factory.StartNew(() => { for (var i = 0; i < N; i++) { list.Add((int)mailBox.Content); } }); setTask.Wait(TimeSpan.FromSeconds(SecondsTimeout)).Should().BeTrue(); getTask.Wait(TimeSpan.FromSeconds(SecondsTimeout)).Should().BeTrue(); } list.Count.Should().Be(N); for (var i = 0; i < N; i++) { list.Contains(i).Should().BeTrue(); } }
public SingleExperimentListener(ExperimentProcess experiment, Action <ExperimentProcess> startProcess) { this.startProcess = startProcess; this.experiment = experiment; this.mailBox = new ProcessMailBox(this.experiment.ChannelName, TimeSpan.FromMilliseconds(-1)); }
public TestObserver(string boxName) { this.mailBox = new ProcessMailBox(boxName, TimeSpan.FromSeconds(5)); }