public void MessageLoggerTest() { int lowCount = 0; int midCount = 0; int highCount = 0; using (MessageLogger logger = new MessageLogger()) { logger.AddLogDevice( MessageLogger.LoggingLevel.Low, null, (device, message) => { _testOutputHelper.WriteLine("Device Low:" + message); Thread.Sleep(100); // device latency lowCount++; }); logger.AddLogDevice( MessageLogger.LoggingLevel.Middle, null, (device, message) => { _testOutputHelper.WriteLine("Device Mid:" + message); Thread.Sleep(100); // device latency midCount++; }); logger.AddLogDevice( MessageLogger.LoggingLevel.High, null, (device, message) => { _testOutputHelper.WriteLine("Device High:" + message); Thread.Sleep(100); // device latency highCount++; }); logger.StartLog(10); for (int i = (int)MessageLogger.LoggingLevel.Lowest - 25; i < (int)MessageLogger.LoggingLevel.Highest + 25; i += 50) { Thread.Sleep(100); // Only message i=>5 should be output logger.AddLog($"Hoge {i}!", (MessageLogger.LoggingLevel)i); } logger.WaitForLogComplete(); lowCount.Is(6); // here may be failed because of the latency midCount.Is(4); highCount.Is(2); // use ProcessMessage to wait accomplishment } // followings must success after closing devices // wait for all messages completion when logger is disposed. lowCount.Is(6); midCount.Is(4); highCount.Is(2); }