public virtual void InitializeAsync(CancellationTokenSource cancellationTokenSource, ITaskManager taskManager, IHttpDownloaderContainer httpDownloaderContainer, IErrorFeedback errorFeedback, IProxySearchFeedback proxySearchFeedback, IGeoIP geoIP, IRatingManager ratingManager) { CancellationTokenSource = cancellationTokenSource; TaskManager = taskManager; HttpDownloaderContainer = httpDownloaderContainer; ErrorFeedback = errorFeedback; ProxySearchFeedback = proxySearchFeedback; GeoIP = geoIP; RatingManager = ratingManager; IAsyncInitialization asyncInitialization = DetailsProvider as IAsyncInitialization; if (asyncInitialization != null) { asyncInitialization.InitializeAsync(cancellationTokenSource, taskManager, httpDownloaderContainer, errorFeedback, proxySearchFeedback, geoIP, ratingManager); } TaskManager.Tasks.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Remove) { StartCheckProxiesTaskIfRequired(); } }; }
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, ratingManager); } } 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(); }
public AsyncInitialized(IAsyncInitialization child) { _child = child; Initialization = InitializeAsync(); }