Daily.CoreSwim 0.0.0.3

dotnet add package Daily.CoreSwim --version 0.0.0.3
                    
NuGet\Install-Package Daily.CoreSwim -Version 0.0.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Daily.CoreSwim" Version="0.0.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Daily.CoreSwim" Version="0.0.0.3" />
                    
Directory.Packages.props
<PackageReference Include="Daily.CoreSwim" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Daily.CoreSwim --version 0.0.0.3
                    
#r "nuget: Daily.CoreSwim, 0.0.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Daily.CoreSwim@0.0.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Daily.CoreSwim&version=0.0.0.3
                    
Install as a Cake Addin
#tool nuget:?package=Daily.CoreSwim&version=0.0.0.3
                    
Install as a Cake Tool

定时作业平台

d4ilys/CoreSwim: 支持分布式的 定时调度作业平台

简单实例化 <br /> ☁️ DependencyInjection <br />🎭 Dashboard <br />

实例化

单机模式

适合控制台项目

Install-Pakcage Daily.CoreSwim

需要注意的是 CoreSwim 一定要单例模式

var coreSwim = new CoreSwim();
coreSwim.AddJob<MyJob01>(CoreSwimActuator.Period(4000));   // 每4秒执行
coreSwim.AddJob<MyJob02>(CoreSwimActuator.DailyAt(2));  // 每天凌晨2点执行
await coreSwim.StartAsync(CancellationToken.None); 

实现IJob

//这里不支持有参构造函数
public class MyJob01 : IJob
{
    public Task ExecuteAsync(CancellationToken cancellationToken)
    {
        Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}-我是第一个任务我执行了..");
        return Task.CompletedTask;
    }
}

集群模式

集群模式下,所有节点在执行任务时,会互相抢任务,确保同一个任务只在一个节点上执行

Daily.CoreSwim.Cluster

需要注意的是 CoreSwimCluster 一点要单例模式

var redis = new RedisClient("localhost:6379,password=111111");
//分布式模式下依赖Redis
var coreSwim = new CoreSwimCluster(redis);
coreSwim.AddJob<MyJob01>(CoreSwimActuator.Period(4000));   // 每4秒执行
coreSwim.AddJob<MyJob02>(CoreSwimActuator.DailyAt(2));  // 每天凌晨2点执行
await coreSwim.StartAsync(CancellationToken.None); 

实现IJob

//这里不支持有参构造函数
public class MyJob01 : IJob
{
    public Task ExecuteAsync(CancellationToken cancellationToken)
    {
        Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}-我是第一个任务我执行了..");
        return Task.CompletedTask;
    }
}

Job类支持构造函数注入

1.可以安装提供的DependencyInjection

2.由于Job类反射创建,可以配置使用官方自带的ActivatorUtilities 来支持构造函数注入

coreSwim.Config.ActivatorCreateInstance = type => ActivatorUtilities.CreateInstance(provider, type);

DependencyInjection

在使用ASP.NET Core / WorkerService时,可以使用 DependencyInjection

单机模式

Install-Package Daily.CoreSwim.DependencyInjection

using Daily.CoreSwim.Actuators;
using Daily.CoreSwim.Dashboard;
using WebApplicationSimple;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCoreSwim(swim =>
{
    swim.AddJob<MyJob01>(CoreSwimActuator.SecondlyAt(10).SetDescription("每分钟的第10秒执行"));
    swim.AddJob<MyJob02>(CoreSwimActuator.Period(2000).SetDescription("每20秒执行一次"));
    swim.AddJob<MyJob03>(CoreSwimActuator.DailyAt(13).SetDescription("每天的13点执行"));
    swim.AddJob<MyJob04>(CoreSwimActuator.DateTime(DateTime.Parse("2025-10-23 11:30:00"))
        .SetDescription("2025-10-24 11:30:00执行"));
    swim.AddJob<MyJob05>(CoreSwimActuator.Period(5000).SetDescription("5000毫秒执行一次"));
    swim.AddJob<MyJob06>(CoreSwimActuator.Period(3000).SetDescription("3000毫秒执行一次"));
});

集群模式

Install-Package Daily.CoreSwim.Cluster.DependencyInjection

using Daily.CoreSwim.Actuators;
using Daily.CoreSwim.Dashboard;
using Daily.CoreSwim.Dashboard.Cluster;
using Daily.CoreSwim.Dashboard.MySql;
using FreeRedis;
using WebApplicationClusterSimple;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton(provider =>
{
    var redis = new RedisClient("192.168.1.123:6379,password=111111");
    return redis;
});

builder.Services.AddCoreSwimCluster(provider => provider.GetRequiredService<RedisClient>(), swim =>
{
    swim.AddJob<MyJob01>("MyJob01", CoreSwimActuator.SecondlyAt(10).SetDescription("每分钟的第10秒执行"));
    swim.AddJob<MyJob02>("MyJob02", CoreSwimActuator.PeriodMinutes(2).SetDescription("每2分钟执行一次"));
    swim.AddJob<MyJob03>("MyJob03", CoreSwimActuator.DailyAt(15).SetDescription("每天的15点执行"));
    swim.AddJob<MyJob04>("MyJob04", CoreSwimActuator.DateTime(DateTime.Parse("2025-10-24 14:59:00"))
        .SetDescription("2025-10-24 14:50:00 执行"));
    swim.AddJob<MyJob05>("MyJob05",
        CoreSwimActuator.Period(5000 * 60).SetDescription("5000 * 60毫秒执行一次"));
    swim.AddJob<MyJob06>("MyJob06",
        CoreSwimActuator.Period(3000 * 60).SetDescription("3000 * 60毫秒执行一次"));
});

Dashboard

单机模式

Install-Package Daily.CoreSwim.Dashboard

using Daily.CoreSwim.Actuators;
using Daily.CoreSwim.Dashboard;
using WebApplicationSimple;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCoreSwim(swim =>
{
    swim.AddJob<MyJob01>(CoreSwimActuator.SecondlyAt(10).SetDescription("每分钟的第10秒执行"));
    swim.AddJob<MyJob02>(CoreSwimActuator.Period(2000).SetDescription("每20秒执行一次"));
    swim.AddJob<MyJob03>(CoreSwimActuator.DailyAt(13).SetDescription("每天的13点执行"));
    swim.AddJob<MyJob04>(CoreSwimActuator.DateTime(DateTime.Parse("2025-10-23 11:30:00"))
        .SetDescription("2025-10-24 11:30:00执行"));
    swim.AddJob<MyJob05>(CoreSwimActuator.Period(5000).SetDescription("5000毫秒执行一次"));
    swim.AddJob<MyJob06>(CoreSwimActuator.Period(3000).SetDescription("3000毫秒执行一次"));
});

var app = builder.Build();

//Dashboard
app.UseCoreSwimDashboard(options => options.DashboardPath = "CoreSwim");

app.Run();

Simple

集群模式

Install-Package Daily.CoreSwim.Dashboard.Cluster

集群模式存储基于FreeSql,根据自身条件选取对应数据库

安装FreeSql对应数据库的Provider

Install-Package FreeSql.Provider.MySqlConnector

using Daily.CoreSwim.Actuators;
using Daily.CoreSwim.Dashboard;
using Daily.CoreSwim.Dashboard.Cluster;
using Daily.CoreSwim.Dashboard.MySql;
using FreeRedis;
using WebApplicationClusterSimple;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();

builder.Services.AddCors(options => options.AddPolicy("daily",
    policyBuilder => { policyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod(); }));

builder.Services.AddSingleton(provider =>
{
    var redis = new RedisClient("192.168.1.123:6379,password=111111");
    return redis;
});

builder.Services.AddCoreSwimCluster(provider => provider.GetRequiredService<RedisClient>(), swim =>
{
    swim.AddJob<MyJob01>("MyJob01", CoreSwimActuator.SecondlyAt(10).SetDescription("每分钟的第10秒执行"));
    swim.AddJob<MyJob02>("MyJob02", CoreSwimActuator.PeriodMinutes(2).SetDescription("每2分钟执行一次"));
    swim.AddJob<MyJob03>("MyJob03", CoreSwimActuator.DailyAt(15).SetDescription("每天的15点执行"));
    swim.AddJob<MyJob04>("MyJob04", CoreSwimActuator.DateTime(DateTime.Parse("2025-10-24 14:59:00"))
        .SetDescription("2025-10-24 14:50:00 执行"));
    swim.AddJob<MyJob05>("MyJob05",
        CoreSwimActuator.Period(5000 * 60).SetDescription("5000 * 60毫秒执行一次"));
    swim.AddJob<MyJob06>("MyJob06",
        CoreSwimActuator.Period(3000 * 60).SetDescription("3000 * 60毫秒执行一次"));
});

builder.Services.AddCoreSwimDashboard().UseFreeSql(options =>
{
    options.DataType = DataType.MySql;
    options.ConnectionString =
        "Data Source=192.168.1.123;Port=3306;User ID=root;Password=123456; Initial Catalog=core_swim_test;Charset=utf8; SslMode=none;";
});

var app = builder.Build();

//Dashboard
app.UseCoreSwimDashboard(options => options.DashboardPath = "CoreSwim");

app.Run();

Cluster

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Daily.CoreSwim:

Package Downloads
Daily.CoreSwim.Dashboard

支持分布式的 定时调度作业平台

Daily.CoreSwim.Cluster

支持分布式的 定时调度作业平台

Daily.CoreSwim.DependencyInjection

支持分布式的 定时调度作业平台

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.0.3 329 10/27/2025
0.0.0.2 172 10/26/2025
0.0.0.1 171 10/26/2025