/// <summary>
 /// 初始化 <see cref="DefaultAsyncTaskRunner{T}"/> 类的新实例。
 /// </summary>
 /// <param name="serviceProvider"></param>
 /// <param name="delay">延迟时间。</param>
 /// <param name="period">执行触发间隔时间。</param>
 /// <param name="context">执行上下文对象。</param>
 public DefaultAsyncTaskRunner(TimeSpan delay, TimeSpan period, IAsyncTaskExecutor executor, TaskExecuteContext context)
 {
     _delay    = delay;
     _period   = period;
     _executor = executor;
     _context  = context;
 }
Exemplo n.º 2
0
        /// <summary>
        /// 启动一个异步的任务执行器。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="options">启动选项。</param>
        public void StartExecutorAsync <T>(StartOptions <T> options) where T : IAsyncTaskExecutor
        {
            if (!(typeof(T).New(ServiceProvider) is IAsyncTaskExecutor executor))
            {
                throw new Exception();
            }

            options.Initializer?.Invoke((T)executor);
            var context = new TaskExecuteContext(ServiceProvider, options.Arguments, _stopToken.Token);

            AddRunner(new DefaultAsyncTaskRunner(options.Delay, options.Period, executor, context));
        }
 /// <summary>
 /// 开始运行。
 /// </summary>
 public void Start()
 {
     if (_timer == null)
     {
         _timer = new Timer(o =>
         {
             using var scope = _context.ServiceProvider.TryCreateScope();
             var context     = new TaskExecuteContext(scope.ServiceProvider, _context.Arguments, _context.CancellationToken);
             _executor.ExecuteAsync(context);
         }, null, _delay, _period);
     }
 }