在C#中,使用TaskScheduler
類可以方便地管理和調(diào)度多個(gè)任務(wù)。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用TaskScheduler
來創(chuàng)建、調(diào)度和執(zhí)行多個(gè)任務(wù):
首先,確保已經(jīng)安裝了System.Threading.Tasks
命名空間。如果沒有安裝,可以通過NuGet包管理器進(jìn)行安裝。
創(chuàng)建一個(gè)繼承自TaskScheduler
的類,以便可以添加自定義邏輯。在這個(gè)示例中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的MyTaskScheduler
類。
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
public class MyTaskScheduler : TaskScheduler
{
private readonly List<Task> _tasks = new List<Task>();
protected override IEnumerable<Task> GetScheduledTasks()
{
return _tasks;
}
protected override void QueueTask(Task task)
{
_tasks.Add(task);
base.QueueTask(task);
}
public void Start()
{
foreach (var task in _tasks)
{
Task.Run(() => task.Run());
}
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)MyTaskScheduler
類,它繼承自TaskScheduler
。我們添加了一個(gè)_tasks
列表來存儲(chǔ)調(diào)度任務(wù),并重寫了GetScheduledTasks
和QueueTask
方法以便訪問這些任務(wù)。我們還添加了一個(gè)Start
方法,用于啟動(dòng)所有調(diào)度任務(wù)。
MyTask
類,它實(shí)現(xiàn)IRunnable
接口。public interface IRunnable
{
void Run();
}
public class MyTask : IRunnable
{
private readonly string _name;
public MyTask(string name)
{
_name = name;
}
public void Run()
{
Console.WriteLine($"Starting task: {_name}");
Thread.Sleep(1000); // 模擬任務(wù)執(zhí)行時(shí)間
Console.WriteLine($"Finished task: {_name}");
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)MyTask
類,它實(shí)現(xiàn)IRunnable
接口。Run
方法用于執(zhí)行任務(wù)邏輯。
MyTaskScheduler
類調(diào)度和執(zhí)行多個(gè)任務(wù)。class Program
{
static void Main(string[] args)
{
var taskScheduler = new MyTaskScheduler();
var tasks = new List<IRunnable>
{
new MyTask("Task 1"),
new MyTask("Task 2"),
new MyTask("Task 3")
};
foreach (var task in tasks)
{
var t = Task.Factory.StartNew(task, CancellationToken.None, TaskCreationOptions.None, taskScheduler);
t.ContinueWith(_ => Console.WriteLine($"Task completed: {t.Result._name}"));
}
taskScheduler.Start();
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)MyTaskScheduler
實(shí)例,并創(chuàng)建了一個(gè)IRunnable
任務(wù)列表。然后,我們遍歷任務(wù)列表,為每個(gè)任務(wù)創(chuàng)建一個(gè)新的Task
實(shí)例,并將其添加到MyTaskScheduler
中。最后,我們調(diào)用taskScheduler.Start()
方法來啟動(dòng)所有調(diào)度任務(wù)。
這個(gè)示例展示了如何使用TaskScheduler
類來管理和調(diào)度多個(gè)任務(wù)。你可以根據(jù)需要擴(kuò)展這個(gè)示例,以適應(yīng)你的具體需求。