91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
沙田区| 宁国市| 新田县| 通化县| 桂东县| 于都县| 五华县| 永平县| 洞口县| 达孜县| 新建县| 屏东市| 武宁县| 察哈| 莱州市| 独山县| 高淳县| 安平县| 确山县| 错那县| 嘉义县| 岳普湖县| 台山市| 桃园市| 屯门区| 塘沽区| 慈溪市| 虹口区| 赣州市| 浙江省| 巴南区| 汶川县| 江北区| 海阳市| 甘孜县| 台江县| 尼木县| 吴江市| 治多县| 新乡县| 鄂托克旗|