コード例 #1
0
        public async Task AsyncJobQueue_TestWithOwnToken()
        {
            IAsyncJobQueue <string> tq = new AsyncJobQueue <string>();
            Guid token = Guid.NewGuid();

            Assert.Equal(token, await tq.QueueJob(EmitStrings(), token));

            (string val, bool valid) = await tq.GetNext(token);

            Assert.Equal("Hello World", val);

            Assert.True(valid);
            (val, valid) = await tq.GetNext(token);

            Assert.Equal("Goodbye World", val);
            Assert.True(valid);
            (val, valid) = await tq.GetNext(token);

            Assert.False(valid);
            Assert.Null(val);
        }
コード例 #2
0
        public async Task AsyncJobQueue_HandlesCancellation()
        {
            IAsyncJobQueue <string> tq = new AsyncJobQueue <string>(false);
            var token = await tq.QueueJob(EmitStrings());

            int times = 0;
            var ct    = new CancellationTokenSource();

            await foreach (string x in tq.AsEnumerable(token))
            {
                times++;
                tq.RequestCancellation(token);
            }

            Assert.Equal(1, times);
            var(val, next) = await tq.GetNext(token);

            Assert.False(next);
            Assert.Null(val);
            Assert.True(tq.TryRemoveSource(token, out var _));
        }
コード例 #3
0
        public async Task AsyncJobQueue_Test()
        {
            IAsyncJobQueue <string> tq = new AsyncJobQueue <string>();
            var token = await tq.QueueJob(EmitStrings());

            (string val, bool next) = await tq.GetNext(token);

            Assert.Equal("Hello World", val);
            Assert.True(next);
            (val, next) = await tq.GetNext(token);

            Assert.True(next);
            Assert.Equal("Goodbye World", val);
            (val, next) = await tq.GetNext(token);

            Assert.False(next);
            Assert.Null(val);
            (val, next) = await tq.GetNext(token);

            Assert.False(next);
            Assert.Null(val);
        }
コード例 #4
0
        public async Task AsyncJobQueue_ContextTest()
        {
            IAsyncJobQueue <string> tq = new AsyncJobQueue <string>(false);
            var token = await tq.QueueJob(EmitStrings());

            (string val, bool next) = await tq.GetNext(token);

            Assert.Equal("Hello World", val);

            Assert.False(tq.TryRemoveSource(token, out var _));

            await foreach (string nextval in tq.AsEnumerable(token))
            {
                Assert.Equal("Goodbye World", nextval);
            }

            (val, next) = await tq.GetNext(token);

            Assert.False(next);
            Assert.Null(val);

            var original = tq.GetSource(token);

            await foreach (string nextval in original)
            {
                Assert.True(nextval == "Hello World" || nextval == "Goodbye World");
            }

            Assert.True(tq.TryRemoveSource(token, out var originalNext));

            await foreach (string nextval in originalNext)
            {
                Assert.True(nextval == "Hello World" || nextval == "Goodbye World");
            }

            Assert.False(tq.TryRemoveSource(token, out var _));
        }
コード例 #5
0
ファイル: Crawler.cs プロジェクト: bm776688/Beast.Web.Crawler
        static void Init()
        {
            //Coming from KSP V6 configs
            int crawlerMaxQueuedJob = 50000;
            int crawlerMaxConcurrentJob = 5;
            int crawlerAsyncTimeout = 18000;
            bool crawlerEnableTpsControl = true;
            int crawlerTps = 8;
            int crawlerSyncTimeout = 18000;

            string proxyServer = "";
            bool proxyBypassOnLocal = true;
            int cacheSize = 5000;
            string cacheExpireTimeSpanString = "1.00:00:00";
            int connectionLimit = 50;

            allowAutoRedirect = false;
            userAgent = defaultUserAgent;


            if (jobQueue == null)
            {
                jobQueue = new AsyncJobQueue<CrawlerState>(ProcessRequest, AbortJob);
            }
            else
            {
                jobQueue.StopProcess();
            }

            jobQueue.MaxQueuedJob = crawlerMaxQueuedJob;
            int maxConcurrentJob = crawlerMaxConcurrentJob;
            jobQueue.MaxConcurrentJob = maxConcurrentJob;
            maxConcurrentJobControl = new Semaphore(maxConcurrentJob, maxConcurrentJob);
            AsyncTimeout = crawlerAsyncTimeout;
            jobQueue.AsyncTimeout = AsyncTimeout;

            jobQueue.EnableTpsControl = crawlerEnableTpsControl;
            if (jobQueue.EnableTpsControl)
            {
                jobQueue.Tps = crawlerTps;
            }

            jobQueue.StartProcess();

            SyncTimeout = crawlerSyncTimeout;

            if (!string.IsNullOrEmpty(proxyServer))
            {
                crawlerProxy = new WebProxy(proxyServer);
                try
                {
                    crawlerProxy.BypassProxyOnLocal = proxyBypassOnLocal;
                }
                catch
                {
                    crawlerProxy.BypassProxyOnLocal = true;
                }
            }

            try
            {
                lruCache = new LruCache<string, UrlContent>(cacheSize);
            }
            catch
            {
                lruCache = new LruCache<string, UrlContent>(5000);
            }
            try
            {
                cacheExpireTimeSpan = TimeSpan.Parse(cacheExpireTimeSpanString);
            }
            catch
            {
                cacheExpireTimeSpan = TimeSpan.FromDays(1);
            }

            // Set Connection limit
            if (connectionLimit > ServicePointManager.DefaultConnectionLimit)
            {
                ServicePointManager.DefaultConnectionLimit = (int)connectionLimit;
            }
        }
コード例 #6
0
        static void Init()
        {
            //Coming from KSP V6 config
            string msnWebServiceUrl = "http://api.bing.net:80/soap.asmx";
            string appId = "67C2363425B169EE6ECD80C8AFD7C1F2387A8A47";
            string msnProxyServer = "";
            bool msnProxyBypassOnLocal = true;
            int msnSyncTimeout = 180000;
            int msnMaxQueuedJob = 50000;
            int msnMaxConcurrentJob = 5;
            bool msnEnableTpsControl = false;
            int msnTps = 8;
            int msnAsyncTimeout = 180000;
            int cacheSize = 5000;
            string cacheExpireTimeSpanString = "1.00:00:00";
            int connectionLimit = 50;

            serviceUrl = msnWebServiceUrl;
            appID = appId;
            string proxyServer = msnProxyServer;
            if (!string.IsNullOrEmpty(proxyServer))
            {
                WebProxy msnProxy = new WebProxy(proxyServer);
                try
                {
                    msnProxy.BypassProxyOnLocal = msnProxyBypassOnLocal;
                }
                catch
                {
                    msnProxy.BypassProxyOnLocal = true;
                }

                s = new BingService(serviceUrl, msnProxy);
            }
            else
            {
                s = new BingService(serviceUrl);
            }

            s.Timeout = msnSyncTimeout;

            if (jobQueue == null)
            {
                jobQueue = new AsyncJobQueue<SnippetGatherState>(ProcessJob, AbortJob);
            }
            else
            {
                jobQueue.StopProcess();
            }

            jobQueue.MaxQueuedJob = msnMaxQueuedJob;
            int maxConcurrentJob = msnMaxConcurrentJob;
            jobQueue.MaxConcurrentJob = maxConcurrentJob;
            maxConcurrentJobControl = new Semaphore(maxConcurrentJob, maxConcurrentJob);

            jobQueue.EnableTpsControl = msnEnableTpsControl;

            if (jobQueue.EnableTpsControl)
            {
                jobQueue.Tps = msnTps;
            }
            jobQueue.AsyncTimeout = msnAsyncTimeout;
            jobQueue.StartProcess();

            try
            {
                lruCache = new LruCache<string, QueryResponse>(cacheSize);
            }
            catch
            {
                lruCache = new LruCache<string, QueryResponse>(5000);
            }

            try
            {
                cacheExpireTimeSpan = TimeSpan.Parse(cacheExpireTimeSpanString);
            }
            catch
            {
                cacheExpireTimeSpan = TimeSpan.FromDays(1);
            }

            if (connectionLimit > ServicePointManager.DefaultConnectionLimit)
            {
                ServicePointManager.DefaultConnectionLimit = connectionLimit;
            }
        }