コード例 #1
0
            private async Task AddFile()
            {
                var          fileSemaphore  = new SemaphoreSlim(0);
                EventHandler releaseHandler = (sender, args) => fileSemaphore.Release();

                SendersWhitelist.Loaded += releaseHandler;
                ((ContractDataStoreWithLocalData <TxPriorityContract.Destination>)MinGasPrices.ContractDataStore).Loaded += releaseHandler;
                ((ContractDataStoreWithLocalData <TxPriorityContract.Destination>)Priorities.ContractDataStore).Loaded   += releaseHandler;

                WriteFile(LocalData);
                FileSemaphore.Release();
                await fileSemaphore.WaitAsync(100);

                await fileSemaphore.WaitAsync(100);

                await fileSemaphore.WaitAsync(100);
            }
コード例 #2
0
        static void Main(string[] args)
        {
            SimpleLog log = new SimpleLog();

            // STEP: Delete any bones -
            #region Clean Up
            File.Delete(log.FileName);
            if (File.Exists(log.FileName) == true)
            {
                System.Console.Out.WriteLine("Error: Test 1.0 fails.");
                return;
            }
            #endregion

            // TEST SET ONE - Simple Log Testing
            #region Basic Tests
            {
                string TestPattern01 = "This is a test for " + log.sProcessId;
                // STEP: Write a test pattern to the file
                if (SimpleLog.Log(TestPattern01) == null)
                {
                    System.Console.Out.WriteLine("Error: Test 1.0.1 fails.");
                    return;
                }
                // STEP: Be sure the file was written
                if (File.Exists(log.FileName) == false)
                {
                    System.Console.Out.WriteLine("Error: Test 1.1 fails.");
                    return;
                }
                // STEP: Verify that our pattern was put in the first line
                System.IO.StreamReader sr = new System.IO.StreamReader(File.OpenRead(log.FileName));
                string sLine = sr.ReadLine();
                if (sLine.IndexOf(TestPattern01) == -1)
                {
                    System.Console.WriteLine("Error: Test 1.2 fails");
                    return;
                }
            }
            #endregion

            // TEST SET TWO - FileSemaphore Testing
            #region Semaphore Tests
            {
                const string TestFileObj = "C:\\TEST.TXT";

                FileSemaphore sem = new FileSemaphore(TestFileObj, 3, 100);

                // STEP: Lock a file
                if (FileSemaphore.Lock(ref sem) == false)
                {
                    System.Console.WriteLine("Error: Test 2.0 fails");
                    return;
                }

                // STEP: Should be locked
                if (sem.IsLocked() == false)
                {
                    System.Console.WriteLine("Error: Test 2.0.1 fails");
                    return;
                }

                // STEP: UnLock same
                if (FileSemaphore.UnLock(ref sem) == false)
                {
                    System.Console.WriteLine("Error: Test 2.1 fails");
                    return;
                }

                // STEP: Should not be locked
                if (sem.IsLocked() == true)
                {
                    System.Console.WriteLine("Error: Test 2.1.1 fails");
                    return;
                }

                // STEP: Now lets use our REAL pid so we can test the LockWait -
                FileSemaphore semMine = new FileSemaphore(TestFileObj, 15);
                if (FileSemaphore.Lock(ref sem) == false)
                {
                    System.Console.WriteLine("Error: Test 3.0 fails");
                    return;
                }
                // Should be locked
                if (sem.IsLocked() == false)
                {
                    System.Console.WriteLine("Error: Test 3.0.1 fails");
                    return;
                }
                #endregion

                // TEST SET THREE - LockWait Testing
                #region WaitLock
                double dtPreCheck = DateTime.Now.TimeOfDay.TotalSeconds;
                if (FileSemaphore.LockWait(ref semMine) == false)
                {
                    System.Console.WriteLine("Error: Test 3.1 fails");
                    return;
                }
                // Should be locked
                if (semMine.IsLocked() == false)
                {
                    System.Console.WriteLine("Error: Test 3.2 fails");
                    return;
                }
                double dtPostCheck = DateTime.Now.TimeOfDay.TotalSeconds;

                if (FileSemaphore.UnLock(ref semMine) == false)
                {
                    System.Console.WriteLine("Error: Test 3.3 fails");
                    return;
                }
                // Should not be locked
                if (semMine.IsLocked() == true)
                {
                    System.Console.WriteLine("Error: Test 3.4 fails");
                    return;
                }

                double dRes = dtPostCheck - dtPreCheck;
                if (dRes < 14.0)
                {
                    System.Console.WriteLine("WARNING: Test 3.5 fails");
                }

                #endregion
            }

            System.Console.WriteLine("Success: All testing passes.");
        } // Main()