public void Test_OK_No_TimeOut()
 {
     _MRE = new ManualResetEvent(false);
     Thread nThread = new Thread(() => ThreadReleaser(2000));
     nThread.Start();
     Task t = _MRE.AsTask();
     t.Should().NotBeNull();
     t.Wait();
     _RunnedOK.Should().BeTrue();
 }
 public void Test_Cancelled_TimeOut()
 {
     _MRE = new ManualResetEvent(false);
     Thread nThread = new Thread(() => ThreadReleaser(5000));
     nThread.Start();
     Task t = _MRE.AsTask(TimeSpan.FromSeconds(1));
     t.Should().NotBeNull();
     t.ContinueWith(tt => tt.IsCanceled.Should().BeTrue());
     _RunnedOK.Should().BeFalse();
 }
Example #3
0
        public async Task SearchAsync(CancellationTokenSource cancellationTokenSource)
        {
            ManualResetEvent waitEvent = new ManualResetEvent(false);

            object[] objects = new object[] { checker, proxyProvider };

            foreach (object @object in objects)
            {
                IAsyncInitialization asyncInitialization = @object as IAsyncInitialization;

                if (asyncInitialization != null)
                    asyncInitialization.InitializeAsync(cancellationTokenSource, taskManager, httpDownloaderContainer, this, this, geoIP);
            }

            IEnumerable<ISearchEngine> searchEngines = searchEngine as IEnumerable<ISearchEngine>;

            if (searchEngines == null)
            {
                await SearchAsyncInternal(searchEngine, cancellationTokenSource);
            }
            else
            {
                List<Task> tasks = new List<Task>();

                foreach (ISearchEngine engine in searchEngines)
                {
                    tasks.Add(SearchAsyncInternal(engine, cancellationTokenSource));
                }

                await Task.WhenAll(tasks);
            }

            taskManager.OnCompleted += () =>
            {
                waitEvent.Set();
            };

            await waitEvent.AsTask();
        }