private void GetResult(string configFile, int taskNumber = 0)
        {
            int sleptSoFar = 0;

            while (worker != null && worker.IsAlive)
            {
                Thread.Sleep(sleptSoFar += 500);

                if (sleptSoFar > SleepTime)
                    Response.Redirect(Request.RawUrl);
            }

            var driver = new MapReduceDriver(configFile);
            var fi = new FileInfo(driver.Tasks[0].Output.Location);

            if (worker == null && fi.LastWriteTime.AddSeconds(5) < DateTime.Now)
            {
                Start(configFile);
                Response.Redirect(Request.RawUrl);
            }

            SendFile(fi);
        }
        private void Start(string configFile)
        {
            if (string.IsNullOrEmpty(configFile))
            {
                JsonMessage("config file name not provided.");
                return;
            }

            if (worker != null)
                return;

            worker = new Thread(new ParameterizedThreadStart(MapReduceThread));
            MapReduceDriver dr = new MapReduceDriver(configFile);
            worker.Start(dr);
            Session[WorkerThreadKey] = worker;

            JsonMessage("Started");
        }
        public StatusMessage Start(string config, IDictionary<string, string> parameters)
        {
            var statuslocal = new StatusMessage();

            if (string.IsNullOrEmpty(config))
            {
                statuslocal.Type = StatusType.Error;
                statuslocal.Message = "Invalid config name";
            }
            else if (worker != null)
            {
                statuslocal.Type = StatusType.Error;
                statuslocal.Message = "A MapReduce is already running";
            }
            else
            {
                driver = new MapReduceDriver(Path.Combine("configs",config));
                SetParameters(driver.Tasks, parameters);

                worker = new Thread(new ThreadStart(MapReduceThread));
                worker.Start();

                status.ResultSetId = statuslocal.ResultSetId = Guid.NewGuid();
            }

            return statuslocal;
        }