在C#中,使用TaskScheduler
類可以輕松地安排和執行任務。要實現任務的動態添加,你可以創建一個自定義的TaskScheduler
類,該類繼承自TaskScheduler
并重寫QueueTask
方法。這樣,你可以在運行時根據需要動態地添加任務。
以下是一個簡單的示例,展示了如何創建一個自定義的TaskScheduler
類并動態添加任務:
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();
// 動態添加任務
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));
// 等待所有任務完成
Task.WaitAll(customTaskScheduler.GetScheduledTasks().ToArray());
}
}
在這個示例中,我們創建了一個名為CustomTaskScheduler
的自定義TaskScheduler
類。這個類使用ConcurrentQueue<Task>
來存儲計劃任務。AddTask
方法接受一個Action
和一個TimeSpan
延遲,然后創建一個新的Task
實例,將其添加到隊列中,并調用基類的QueueTask
方法來安排任務。
在Main
方法中,我們創建了一個CustomTaskScheduler
實例,并使用AddTask
方法動態添加了兩個任務。這些任務將在指定的延遲后執行。最后,我們使用Task.WaitAll
等待所有任務完成。