/// <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; }
/// <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); } }