c# 并行运行timer
时间: 2023-10-28 22:20:54 浏览: 56
要在C#中并行运行Timer,可以使用Task Parallel Library(TPL)提供的功能。以下是一个示例代码:
```csharp
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 创建一个 Timer 对象
Timer timer = new Timer(TimerCallback, null, 0, 1000);
// 创建一个 CancellationTokenSource 对象,用于取消任务
CancellationTokenSource cts = new CancellationTokenSource();
// 创建并行任务
Task[] tasks = new Task[3]
{
Task.Factory.StartNew(() => DoWork(cts.Token)),
Task.Factory.StartNew(() => DoWork(cts.Token)),
Task.Factory.StartNew(() => DoWork(cts.Token))
};
// 等待所有任务完成
Task.WaitAll(tasks);
// 停止 Timer
timer.Dispose();
}
static void TimerCallback(object state)
{
Console.WriteLine("Timer callback executed.");
}
static void DoWork(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
// 执行一些工作...
Console.WriteLine("Doing work...");
// 模拟工作的延迟
Thread.Sleep(2000);
}
}
}
```
在这个示例中,我们创建了一个Timer对象,并设置它的回调函数。然后,我们使用Task Parallel Library创建了3个并行任务,并在每个任务中执行DoWork方法。DoWork方法是一个无限循环,在循环内部执行一些工作,并使用Thread.Sleep模拟工作的延迟。任务会一直执行,直到取消标记被设置。最后,我们等待所有任务完成,并停止Timer对象。
请注意,为了在DoWork方法中能够检查取消标记,我们将CancellationToken作为参数传递给DoWork方法。这样,当我们调用cts.Cancel()时,任务会收到取消请求,并停止执行。
希望这能帮到你!