コード例 #1
0
        /// <summary>
        /// 工作线程周期执行任务。
        /// </summary>
        private async void ThreadWork()
        {
            while (Running)
            {
                // 获取目标任务
                TTask task;
                try
                {
                    task = await GetTaskAsync();
                }
#pragma warning disable CA1031 // Do not catch general exception types
                catch (Exception ex)
                {
                    OnTaskBuildFaulted(new TaskBuildFaultedEventArgs(new BackgroundTaskException("BackgroundTask build faulted.", ex)));
                    // 使用空闲休眠时间休眠
                    TaskWaitHandle.WaitOne(TaskIdleTime);
                    continue;
                }
#pragma warning restore CA1031 // Do not catch general exception types

                if (null == task)
                {
                    // 使用空闲休眠时间休眠
                    TaskWaitHandle.WaitOne(TaskIdleTime);
                    continue;
                }

                // 定义任务执行完成事件参数
                var taskExecutedArgs = new TaskExecutedEventArgs <TTask>(task);

                try
                {
                    OnTaskExecuting(new TaskExecutingEventArgs <TTask>(task));
                    await ExecuteTaskAsync(task);
                }
#pragma warning disable CA1031 // Do not catch general exception types
                catch (Exception ex)
                {
                    taskExecutedArgs.IsFaulted = true;
                    taskExecutedArgs.Exception = new BackgroundTaskException(ex.Message, ex);
                }
#pragma warning restore CA1031 // Do not catch general exception types
                finally
                {
                    // 通知工作线程已执行完一轮任务。
                    taskExecutedArgs.CompletedTime = DateTime.Now;
                    OnTaskExecuted(taskExecutedArgs);
                }

                // 工作线程周期信号量
                TaskWaitHandle.WaitOne(TaskBusyTime);
            }

            TaskWaitHandle.Dispose();
            TaskWaitHandle = null;

            // 通知工作线程已退出。
            OnTaskThreadExited(new TaskThreadExitedEventArgs());
        }
コード例 #2
0
        /// <summary>
        /// 停止工作线程。
        /// </summary>
        /// <remarks>
        /// 如果工作线程已经为停止状态,该方法不做任何操作。
        /// 如果在调用Stop方法停止工作线程时还有运行中的任务,工作线程会等待WaitExitMinute指定的超时分钟数。
        /// </remarks>
        public void Stop()
        {
            if (Running == false)
            {
                return;
            }

            Running = false;


            if (TaskWaitHandle != null)
            {
                // 通知工作线程休眠信号量。
                TaskWaitHandle.Set();
            }
        }