C# 为什么quartz.net不执行我的所有代码?
我正在使用mvc中使用quartz.net调度的任务,但不幸的是,并非所有代码都完全运行,并且忽略了大部分代码步骤。 经过大量工作并与前面的示例进行比较后,我意识到从IJOB类继承的Execute函数是一个异步类型,在调用global.asax后,我必须按如下方式定义它,在这种情况下,它不会完全执行代码并忽略部分代码。 谢谢你的帮助,因为我真的很烦 Global.asax:C# 为什么quartz.net不执行我的所有代码?,c#,asp.net-mvc,quartz.net,C#,Asp.net Mvc,Quartz.net,我正在使用mvc中使用quartz.net调度的任务,但不幸的是,并非所有代码都完全运行,并且忽略了大部分代码步骤。 经过大量工作并与前面的示例进行比较后,我意识到从IJOB类继承的Execute函数是一个异步类型,在调用global.asax后,我必须按如下方式定义它,在这种情况下,它不会完全执行代码并忽略部分代码。 谢谢你的帮助,因为我真的很烦 Global.asax: public class Global : HttpApplication { void Applica
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ConfigureStoryQuartzJobs().Wait();
}
public static async Task ConfigureStoryQuartzJobs()
{
DateTimeOffset startTime = DateTime.UtcNow;
IJobDetail job = JobBuilder.Create<CheckContent>()
.WithIdentity("job1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.StartAt(startTime)
.WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever())
.Build();
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sc = await sf.GetScheduler();
await sc.ScheduleJob(job, trigger);
await sc.Start();
}
}
忽略了哪些部分,您是如何确定的?只执行第一个函数的一部分,并在加载页面后拒绝执行。我认为,不应在应用程序启动时调用异步函数,我使用Wait()函数解决了这个问题,在代码操作结束时可以忽略这个问题,但是我对此一无所知。
Wait()
调用在某种程度上是“危险的”。您正在阻止处理此问题的线程。您能否先尝试将您的主函数更改为异步无效应用程序\u Start
,并使用等待配置StoryQuartZjobs()
作为最后一行,而不是等待()
?或者,如果没有等待
,可能会触发并忘记,也许这就是应该做的(从ConfigureStoryQuartzJob
中删除所有wait
和async)。您只想启动调度程序并让它在后台运行,而忽略了部分,您是如何确定的?只执行第一个函数的一部分,并在加载页面后拒绝执行。我认为,不应在应用程序\u start中调用异步函数,并且我已使用了Wait()函数来解决此问题,在代码操作结束时可以忽略此问题,但对此我没有其他想法。Wait()
调用在某种程度上是“危险的”。您正在阻止处理此问题的线程。您是否可以首先尝试将主函数更改为异步无效应用程序\u Start
,并使用等待配置StoryQuartzJobs()
作为最后一行,而不是等待()
?或者,如果没有等待
,则可能会发生火灾并忘记,也许这就是应该做的(从ConfigureStoryQuartzJob
中删除所有wait
和async)。您只需启动计划程序并让它在后台运行即可
public class CheckContent : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await RelaseContent.SendStory();
await RelaseContent.SendPost();
await RelaseContent.SendAlboum();
}
}