https://github.com/stratosblue/timingwheelscheduler
a scheduler based on multi-level timing wheels. 一个基于多级时间轮的调度器。
https://github.com/stratosblue/timingwheelscheduler
delay scheduler task timeout timing-wheel timingwheel
Last synced: 6 months ago
JSON representation
a scheduler based on multi-level timing wheels. 一个基于多级时间轮的调度器。
- Host: GitHub
- URL: https://github.com/stratosblue/timingwheelscheduler
- Owner: stratosblue
- License: mit
- Created: 2024-03-28T13:56:47.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-03-28T14:15:26.000Z (over 1 year ago)
- Last Synced: 2025-02-15T03:41:41.279Z (8 months ago)
- Topics: delay, scheduler, task, timeout, timing-wheel, timingwheel
- Language: C#
- Homepage:
- Size: 31.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# TimingWheelScheduler
a scheduler based on multi-level timing wheels. 一个基于多级时间轮的调度器。
## 如何使用
### 引用包
```xml
```
### 创建 `scheduler`
```C#
TimeSpan TickSpan; //每次tick的时间长度
int TicksPerWheel; //每层时间轮的tick数量(每层时间轮的大小)
int NumberOfWheels; //时间轮的总层数
var options = new TimingWheelSchedulerOptions(TickSpan, TicksPerWheel, NumberOfWheels)
{
TaskScheduler = null; //TimingWheelScheduler 内部创建tick任务时所使用的 TaskScheduler,不指定时使用 TaskScheduler.Default
};//创建manager,manager用于管理scheduler
var schedulerManager = TimingWheelScheduler.Create(options);
//获取调度器
var scheduler = schedulerManager.Scheduler;//销毁调度器
//schedulerManager.Dispose();
```### 使用默认的共享 `scheduler`
```C#
//TickSpan = 50ms
//TicksPerWheel = 255
//NumberOfWheels = 4
var scheduler = TimingWheelScheduler.Shared;
```### 创建定时任务
```
var delay = TimeSpan.FromSeconds(1); //延时1s执行
var callback = () => Console.WriteLine("callbak"); //执行时的回调
var options = new ScheduleOptions() //调度选项,可选
{
TaskScheduler = null, //执行callback时使用的 TaskScheduler,不指定时使用 TaskScheduler.Default
};//计划调度
var disposable = scheduler.Schedule(delay, callback, options);//取消执行
//disposable.Dispose();
```### Async Delay
```C#
using var cts = new CancellationTokenSource();
var cancellationToken = cts.Token; //取消token,可选
var delay = TimeSpan.FromSeconds(1); //延时1s//延时
await scheduler.Delay(delay, cancellationToken);
```