溫馨提示×

C# taskscheduler如何實(shí)現(xiàn)任務(wù)的動(dòng)態(tài)添加

c#
小樊
84
2024-10-16 19:24:23
欄目: 編程語言

在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ù)完成。

0