Ejemplo n.º 1
0
        public static void fetch()
        {
            WebClient client = new WebClient();

            while (!m_isDone)
            {
                Filename current;
                lock (Shared.s_url_queue)
                {
                    if (Shared.s_url_queue.Count != 0)
                    {
                        current = Shared.s_url_queue.Dequeue();
                    }
                    else if (!URLGenerator.isDone())
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                    else
                    {
                        m_isDone = true;
                        break;
                    }
                }
                String currXLS = current.toXLS();
                if (URLGenerator.directories[current.dirNum - 1].getDownload())
                {
                    Console.WriteLine("Downloading " + Config.url_base + currXLS + " to " + Config.local_xls_base + currXLS);
                    try
                    {
                        client.DownloadFile(Config.url_base + currXLS, Config.local_xls_base + currXLS);
                    }
                    catch (WebException ex)
                    {
                        Console.WriteLine("Failed to download " + Config.url_base + currXLS);
                        Console.WriteLine(ex.Message);
                        continue;
                        //throw ex;
                    }
                    Console.WriteLine("Downloaded " + currXLS);

                    lock (Shared.s_xls_queue)
                    {
                        Shared.s_xls_queue.Enqueue(current);
                    }
                }
                else
                {
                    Console.WriteLine("Skipping " + Config.url_base + currXLS);
                }
                URLGenerator.directories[current.dirNum - 1].advance();
            }
        }
Ejemplo n.º 2
0
        public static void Main()
        {
            var timer = Stopwatch.StartNew();

            ///////

            // Generate URLs
            Task.Run(() =>
            {
                URLGenerator.generate();
            });

            // Fetch files
            Task.Run(() =>
            {
                Parallel.For(0, Config.max_thread_num, index =>
                {
                    Fetcher.fetch();
                });
            });

            // Convert files
            Task latest = Task.Run(() =>
            {
                Parallel.For(0, Config.max_thread_num, index =>
                {
                    Converter.convert();
                });
            });

            Task.WaitAll(latest);

            ///////
            timer.Stop();
            Console.WriteLine(timer.ElapsedMilliseconds / (60 * 1000.0));
        }