中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C# taskscheduler如何實現任務的動態添加

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

在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等待所有任務完成。

0
客服| 昌平区| 玉林市| 邯郸县| 诸暨市| 乌兰察布市| 慈利县| 五峰| 京山县| 昆山市| 温宿县| 茶陵县| 辛集市| 庆元县| 永顺县| 丘北县| 宣化县| 泽州县| 凤城市| 桐乡市| 漳州市| 凤阳县| 渝北区| 获嘉县| 灵台县| 黎城县| 家居| 五寨县| 黔东| 成安县| 广元市| 上林县| 永川市| 搜索| 遂平县| 昌邑市| 松溪县| 临海市| 理塘县| 平阴县| 宜宾县|