在C#中,使用TaskScheduler
類可以方便地管理和調度多個任務。以下是一個簡單的示例,展示了如何使用TaskScheduler
來創建、調度和執行多個任務:
首先,確保已經安裝了System.Threading.Tasks
命名空間。如果沒有安裝,可以通過NuGet包管理器進行安裝。
創建一個繼承自TaskScheduler
的類,以便可以添加自定義邏輯。在這個示例中,我們將創建一個簡單的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());
}
}
}
在這個示例中,我們創建了一個MyTaskScheduler
類,它繼承自TaskScheduler
。我們添加了一個_tasks
列表來存儲調度任務,并重寫了GetScheduledTasks
和QueueTask
方法以便訪問這些任務。我們還添加了一個Start
方法,用于啟動所有調度任務。
MyTask
類,它實現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); // 模擬任務執行時間
Console.WriteLine($"Finished task: {_name}");
}
}
在這個示例中,我們創建了一個MyTask
類,它實現IRunnable
接口。Run
方法用于執行任務邏輯。
MyTaskScheduler
類調度和執行多個任務。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();
}
}
在這個示例中,我們創建了一個MyTaskScheduler
實例,并創建了一個IRunnable
任務列表。然后,我們遍歷任務列表,為每個任務創建一個新的Task
實例,并將其添加到MyTaskScheduler
中。最后,我們調用taskScheduler.Start()
方法來啟動所有調度任務。
這個示例展示了如何使用TaskScheduler
類來管理和調度多個任務。你可以根據需要擴展這個示例,以適應你的具體需求。