我正在编写一个用C#创建Quartz调度作业(job)的方法.目前看起来是这样的.

private async Task BuildJobs(int startHour, int endHour, int intervalOffsetSeconds = 0)
{
    try
    {
        var job = JobBuilder.Create<RepostTransactionsJob>()
            .WithIdentity(nameof(RepostTransactionsJob), TriggerGroup)
            .WithDescription("Reposting transactions")
            .Build();

        var trigger = TriggerBuilder.Create()
            .WithIdentity(string.Concat(nameof(RepostTransactionsJob), "-trigger"), TriggerGroup)
            .WithSchedule(CronScheduleBuilder.CronSchedule(string.Format("{2:ss} {2:mm} {0}-{1} ? * * *", startHour, endHour, TimeSpan.FromSeconds(intervalOffsetSeconds))))
            .Build();

        await this.scheduler.ScheduleJob(job, trigger);
    }
    catch (Exception ex)
    {
        this.logger.LogToLocal(ex.Message);
    }
}

然而,我想要将RepostTransactionsJob分的参数化为参数,我正在努力.我try 了以下方法,但返回了一个构建错误.

try :

private async Task BuildJobs<T>(int startHour, int endHour, int intervalOffsetSeconds = 0) where T : class
{
    try
    {
        var jobName = typeof(T).Name;

        var job = JobBuilder.Create<T>()
            .WithIdentity(jobName, TriggerGroup)
            .WithDescription("Reposting transactions")
            .Build();

        var trigger = TriggerBuilder.Create()
            .WithIdentity(string.Concat(jobName, "-trigger"), TriggerGroup)
            .WithSchedule(CronScheduleBuilder.CronSchedule(string.Format("{2:ss} {2:mm} {0}-{1} ? * * *", startHour, endHour, TimeSpan.FromSeconds(intervalOffsetSeconds))))
            .Build();

        await this.scheduler.ScheduleJob(job, trigger);
    }
    catch (Exception ex)
    {
        this.logger.LogToLocal(ex.Message);
    }
}

生成错误:

The type 'T' cannot be used as a type parameter 'T' in the generic type or method 'JobBuilder.Create<T>()' There is no implicit reference conversion from 'T' to 'Quartz.IJob'

推荐答案

如错误所示,JobBuilder.Create的约束为IJob:

public static JobBuilder Create<T>()
where T : IJob

因此,您的方法需要同样的约束.

private async Task BuildJobs<T>(int startHour, int endHour, int intervalOffsetSeconds = 0) where T : IJob

Csharp相关问答推荐

System.Text.Json:反序列化返回为空数组的字典时出错

ASP.NET Core将SON重新序列化为派生类

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

在WPF.NET 6中使用C++/WinRT组件(但实际上是任何WinRT组件)

. NET在上一个操作完成之前,在此上下文实例上启动了第二个操作

Select Many和默认IfEmpty内部Select Many错误工作

限制特定REST API不被访问,但部署代码

自动映射程序在GroupBy之后使用项目

如何在WPF的树视图中显示一个对象的两个或多个属性,其中只有一个是分层项?

UWP应用程序try 将打包的本机.exe文件加载为C#程序集

如何在C#中创建VS代码中的控制台应用程序时自动生成Main方法

将类移动到新命名空间后更新RavenDB Raven-Clr-Type

有没有类似于扩展元素的合并元组的语法?

RabbitMQ群集的MassTransit配置问题

记录类型';==运算符是否与实现IEquatable<;T&>;的类中的';equals&>方法执行等价比较?

为什么我的伺服电机不动,下面的代码?

EF Core:如何对关系属性进行建模?

无法向Unity注册Microsoft Logger

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

ASP.NET核心中的授权,如何在DbContext启动之前提供租用ID