Пример #1
0
        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();
                }
            };
        }
Пример #2
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, 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();
 }