public void RebuildItemDatabase_RebuildItemDatabase_Success() { AutoResetEvent progressEvent = new AutoResetEvent(false); AutoResetEvent completedEvent = new AutoResetEvent(false); ItemsDatabaseBuilder dbBuilder = new ItemsDatabaseBuilder(); var cancelToken = new CancellationTokenSource(); int progress = 0; int totalRequests = 0; var sw = new Stopwatch(); sw.Start(); totalRequests = dbBuilder.RebuildItemDatabase( CultureInfo.CurrentUICulture, () => { progress++; Console.WriteLine("Rebuild at {0} percent", ((double)progress / (double)totalRequests) * 100); progressEvent.Set(); }, () => { Console.WriteLine("Rebuild complete"); completedEvent.Set(); }, cancelToken.Token); int i = 0; while (progress < totalRequests) { Assert.IsTrue(progressEvent.WaitOne()); Assert.AreEqual(++i, progress); } Assert.IsTrue(completedEvent.WaitOne()); sw.Stop(); Console.WriteLine("It took {0} minutes to rebuild the database", sw.Elapsed.TotalMinutes); }
public void RebuildItemDatabase_RebuildItemDatabase_Canceled() { AutoResetEvent progressEvent = new AutoResetEvent(false); AutoResetEvent completedEvent = new AutoResetEvent(false); ItemsDatabaseBuilder dbBuilder = new ItemsDatabaseBuilder(); var cancelToken = new CancellationTokenSource(); int progress = 0; int totalRequests = 0; totalRequests = dbBuilder.RebuildItemDatabase( CultureInfo.CurrentUICulture, () => { progress++; Console.WriteLine("Rebuild at {0} percent", ((double)progress / (double)totalRequests) * 100); progressEvent.Set(); }, () => { Console.WriteLine("Rebuild complete"); completedEvent.Set(); }, cancelToken.Token); for (int i = 1; i <= 3; i++) { Assert.IsTrue(progressEvent.WaitOne(5000)); Assert.AreEqual(i, progress); } // Cancel it cancelToken.Cancel(); Assert.IsTrue(progressEvent.WaitOne(5000)); Assert.IsFalse(progressEvent.WaitOne(5000)); }