예제 #1
0
        public void Execute_WithAnyAsyncAction_ShouldReturnImmediately()
        {
            var executer = new WorkExecuter();

            Action act = () => executer.Execute(async() => await Task.Delay(5000));

            act.ExecutionTime().Should().BeLessThan(1.Seconds());
        }
예제 #2
0
        public void Execute_WithAnyAction_ShouldReturnImmediately()
        {
            var executer = new WorkExecuter();

            Action act = () => executer.Execute(() => Thread.Sleep(5000));

            act.ExecutionTime().Should().BeLessThan(1.Seconds());
        }
예제 #3
0
        public async Task Execute_WithAnyAction_ShouldRaisePropertyChanged()
        {
            var executer = new WorkExecuter();

            using (var monitor = executer.Monitor())
            {
                await executer.Execute(() => { });

                monitor.GetEventRecorder(nameof(executer.PropertyChanged)).Should().NotBeEmpty();
            }
        }
예제 #4
0
        public async Task Execute_WithAnyAction_ShouldSetIsWorking()
        {
            var executer = new WorkExecuter();

            var task = executer.Execute(() => Thread.Sleep(5000));

            executer.IsWorking.Should().BeTrue();

            await task;

            executer.IsWorking.Should().BeFalse();
        }
예제 #5
0
        /// <summary>
        /// attempts to increase executers.
        /// </summary>
        /// <returns></returns>
        private Task TryIncreaseExecuters()
        {
            int currentNumOfExecuters = this.m_Executers.Count;
            int qNumber = this.m_QueueManager.Count;


            //we maxed out ?
            // if we add, will it be more than queues?
            if (currentNumOfExecuters == this.m_MaxNumOfWorkers || (currentNumOfExecuters + 1) > qNumber)
            {
                return(Task.FromResult(0));
            }

            // we are good add
            WorkExecuter <Handler, Wi> newExecuter = new WorkExecuter <Handler, Wi>(this);

            newExecuter.Start();
            this.m_Executers.AddOrUpdate(newExecuter.m_WorkerExecuterId, newExecuter, (k, v) => { return(newExecuter); });


            return(Task.FromResult(0));
        }
 public WorkExecuterViewModel(WorkExecuter workExecuter)
 {
     WorkExecuter = workExecuter;
     workExecuter.PropertyChanged += WorkExecuter_PropertyChanged;
 }