Ejemplo n.º 1
0
        public void Execute(ScheduledTask task, ThreadController controller)
        {
            controller.Wait();

            task.Status = TaskStatus.Running;
            _repository.Save(task);

            var client = CreateClient(task);

            controller.Wait();

            try
            {
                client.Open();
                var result = client.Execute();
                client.Close();

                RecordResult(task, result.Result, result.Message);
            }

            catch(TimeoutException te)
            {
                RecordResult(task, TaskResult.RecoverableFault, te.Message, te);
                client.Abort();
            }

            catch(CommunicationException ce)
            {
                RecordResult(task, TaskResult.RecoverableFault, ce.Message, ce);
                client.Abort();
            }

            catch(Exception ex)
            {
                RecordResult(task, TaskResult.FatalError, ex.Message, ex);
                client.Abort();
                throw;
            }
        }
Ejemplo n.º 2
0
        public void Execute(ScheduledTask task, ThreadController controller)
        {
            controller.Wait();

            task.Status = TaskStatus.Running;
            _repository.Save(task);

            var client = CreateClient(task);

            controller.Wait();

            try
            {
                client.Open();
                var result = client.Execute();
                client.Close();

                RecordResult(task, result.Result, result.Message);
            }

            catch (TimeoutException te)
            {
                RecordResult(task, TaskResult.RecoverableFault, te.Message, te);
                client.Abort();
            }

            catch (CommunicationException ce)
            {
                RecordResult(task, TaskResult.RecoverableFault, ce.Message, ce);
                client.Abort();
            }

            catch (Exception ex)
            {
                RecordResult(task, TaskResult.FatalError, ex.Message, ex);
                client.Abort();
                throw;
            }
        }
Ejemplo n.º 3
0
        public void Poll(ThreadController controller)
        {
            controller.Wait(); // check for pause/abort

            while (true)
            {
                try
                {
                    var tasks = _repository.GetPendingTasks();
                    foreach (var task in tasks)
                    {
                        var taskToRun = task;
                        controller.Start(c => _executor.Execute(taskToRun, controller));
                    }
                }

                finally
                {
                    // TODO: configurable polling interval
                    controller.Wait(TimeSpan.FromMinutes(1));
                }
            }
        }
Ejemplo n.º 4
0
        public void Poll(ThreadController controller)
        {
            controller.Wait(); // check for pause/abort

            while(true)
            {
                try
                {
                    var tasks = _repository.GetPendingTasks();
                    foreach(var task in tasks)
                    {
                        var taskToRun = task;
                        controller.Start(c => _executor.Execute(taskToRun, controller));
                    }
                }

                finally
                {
                    // TODO: configurable polling interval
                    controller.Wait(TimeSpan.FromMinutes(1));
                }
            }
        }
        public void Wait_OnNonTaskThread_BlocksForActivity()
        {
            var fail = true;

            using (var controller = new ThreadController())
            {
                controller.Start();
                controller.Pause();

                Action func = () =>
                {
                    controller.Wait(TimeSpan.FromMilliseconds(50));
                    fail = true;
                };

                fail = false;
                var result = func.BeginInvoke(null, null);
                controller.Stop();
                result.AsyncWaitHandle.WaitOne();

                Assert.That(fail, Is.False, "Task did not wait properly.");
            }
        }
        public void Wait_OnNonTaskThread_BlocksForActivity()
        {
            var fail = true;
            using(var controller = new ThreadController())
            {
                controller.Start();
                controller.Pause();

                Action func = () =>
                {
                    controller.Wait(TimeSpan.FromMilliseconds(50));
                    fail = true;
                };

                fail = false;
                var result = func.BeginInvoke(null, null);
                controller.Stop();
                result.AsyncWaitHandle.WaitOne();

                Assert.That(fail, Is.False, "Task did not wait properly.");
            }
        }