コード例 #1
0
        public void ThreadSafeSingletonPatternTest()
        {
            //Arrange
            PrinterThreadSafe firstPrinterObject  = null;
            PrinterThreadSafe secondPrinterObject = null;
            PrinterThreadSafe thirdPrinterObject  = null;

            //Act
            Task task1 = Task.Factory.StartNew(() => {
                firstPrinterObject = InitializePrinterThreadSafeObjectAndAddDocument("First", "First-Document");
            });
            Task task2 = Task.Factory.StartNew(() => {
                secondPrinterObject = InitializePrinterThreadSafeObjectAndAddDocument("Second", "Second-Document");
            });
            Task task3 = Task.Factory.StartNew(() => {
                thirdPrinterObject = InitializePrinterThreadSafeObjectAndAddDocument("Third", "Third-Document");
            });

            Task.WaitAll(task1, task2, task3);

            //Assert
            Assert.IsTrue(firstPrinterObject.Equals(secondPrinterObject));
            Assert.IsTrue(firstPrinterObject.Equals(thirdPrinterObject));
            Assert.IsTrue(thirdPrinterObject.Equals(secondPrinterObject));
        }
コード例 #2
0
        public PrinterThreadSafe InitializePrinterThreadSafeObjectAndAddDocument(string instanceName, string documentName)
        {
            var printerObject = PrinterThreadSafe.GetPrinterInstance(instanceName);

            printerObject.AddDocument(documentName);
            printerObject.PrintDocument();
            return(printerObject);
        }