Ejemplo n.º 1
0
        public void TestDeleteWithWaitWhenAbleToDeleteInTime(int readerCount)
        {
            var batch    = new WorkQueueBatch(new ThreadPoolWorkQueue());
            var random   = new Random();
            var execArgs = Enumerable
                           .Range(0, readerCount)
                           .Select(x => new {
                Evt   = new ManualResetEvent(false),
                Delay = random.Next(500)
            })
                           .ToArray();

            Array.ForEach(execArgs, a => batch.Add(a, args => {
                using (var strm = File.Open(mPath, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.Read)) {
                    args.Evt.Set();
                    Thread.Sleep(args.Delay);
                    strm.Close();
                }
            }));
            Array.ForEach(execArgs, a => Assert.That(a.Evt.WaitOne(1000), Is.True));
            var sw = Stopwatch.StartNew();

            mFile.Delete(mPath, 1000);
            batch.WaitAll(1000);
            sw.Stop();
            var min = execArgs.Min(a => a.Delay);

            Assert.That(sw.ElapsedMilliseconds, Is.GreaterThanOrEqualTo(min - 10).And.LessThan(1000));
            Assert.That(mFile.Exists(mPath), Is.False);
        }
Ejemplo n.º 2
0
        public void TestDeleteWithWaitWhenAbleToDeleteInTime(int readerCount)
        {
            var dir = Path.Combine(TempDir, "a");
              var file = Path.Combine(dir, "a.txt");
              mDir.CreateDirectory(dir);
              File.WriteAllText(file, "data");

              var batch = new WorkQueueBatch(new ThreadPoolWorkQueue());
              var random = new Random();
              var execArgs = Enumerable
            .Range(0, readerCount)
            .Select(x => new {
                           Evt = new ManualResetEvent(false),
                           Delay = random.Next(500)
                         })
            .ToArray();

              Array.ForEach(execArgs, a => batch.Add(a, args => {
                                                  using (var strm = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite)) {
                                                    args.Evt.Set();
                                                    Thread.Sleep(args.Delay);
                                                    strm.Close();
                                                  }
                                                }));
              Array.ForEach(execArgs, a => Assert.That(a.Evt.WaitOne(1000), Is.True));
              var sw = Stopwatch.StartNew();
              mDir.Delete(dir, 1000);
              batch.WaitAll(1000);
              sw.Stop();
              var min = execArgs.Min(a => a.Delay);
              Assert.That(sw.ElapsedMilliseconds, Is.GreaterThanOrEqualTo(min - 10).And.LessThan(1000));
              Assert.That(mDir.Exists(dir), Is.False);
        }
Ejemplo n.º 3
0
 public void DoSetup()
 {
     mQueue = new SynchronousWorkQueue();
     mBatch = new WorkQueueBatch(mQueue);
     mCount = 0;
 }
Ejemplo n.º 4
0
 public void DoSetup()
 {
     mQueue = new SynchronousWorkQueue();
       mBatch = new WorkQueueBatch(mQueue);
       mCount = 0;
 }