在C#中,使用TaskScheduler
類可以輕松地安排和執(zhí)行任務(wù)。要實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)添加,你可以創(chuàng)建一個(gè)自定義的TaskScheduler
類,該類繼承自TaskScheduler
并重寫QueueTask
方法。這樣,你可以在運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地添加任務(wù)。
以下是一個(gè)簡單的示例,展示了如何創(chuàng)建一個(gè)自定義的TaskScheduler
類并動(dòng)態(tài)添加任務(wù):
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
class CustomTaskScheduler : TaskScheduler
{
private readonly ConcurrentQueue<Task> _tasks = new ConcurrentQueue<Task>();
protected override IEnumerable<Task> GetScheduledTasks()
{
return _tasks;
}
protected override void QueueTask(Task task)
{
_tasks.Enqueue(task);
base.QueueTask(task);
}
public void AddTask(Action action, TimeSpan delay)
{
var task = new Task(action);
task.Delay(delay);
AddTask(task);
}
}
class Program
{
static void Main(string[] args)
{
var customTaskScheduler = new CustomTaskScheduler();
// 動(dòng)態(tài)添加任務(wù)
customTaskScheduler.AddTask(() => Console.WriteLine("Task 1 executed at: " + DateTime.Now), TimeSpan.FromSeconds(2));
customTaskScheduler.AddTask(() => Console.WriteLine("Task 2 executed at: " + DateTime.Now), TimeSpan.FromSeconds(4));
// 等待所有任務(wù)完成
Task.WaitAll(customTaskScheduler.GetScheduledTasks().ToArray());
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為CustomTaskScheduler
的自定義TaskScheduler
類。這個(gè)類使用ConcurrentQueue<Task>
來存儲(chǔ)計(jì)劃任務(wù)。AddTask
方法接受一個(gè)Action
和一個(gè)TimeSpan
延遲,然后創(chuàng)建一個(gè)新的Task
實(shí)例,將其添加到隊(duì)列中,并調(diào)用基類的QueueTask
方法來安排任務(wù)。
在Main
方法中,我們創(chuàng)建了一個(gè)CustomTaskScheduler
實(shí)例,并使用AddTask
方法動(dòng)態(tài)添加了兩個(gè)任務(wù)。這些任務(wù)將在指定的延遲后執(zhí)行。最后,我們使用Task.WaitAll
等待所有任務(wù)完成。