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); }
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); }
public void DoSetup() { mQueue = new SynchronousWorkQueue(); mBatch = new WorkQueueBatch(mQueue); mCount = 0; }
public void DoSetup() { mQueue = new SynchronousWorkQueue(); mBatch = new WorkQueueBatch(mQueue); mCount = 0; }