Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2872字,纯文字阅读大概需要5分钟。
内容图文
背景
需要Client跑服务在终端间隔执行任务,我的目标是运行在树莓派上
Client代码
如果未连接成功时隔3秒重新连接服务器
public static void Reconnect() { var isLink = false; do { Thread.Sleep(3000);//3秒 isLink = Signalr().GetAwaiter().GetResult(); } while (!isLink); }
通过命令开启 Quartz 调度器
public static async Task<bool> Signalr() { System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 var urlstr = "https://localhost:44363//hubs"; var url = new Uri(urlstr); var connection = new HubConnectionBuilder() .WithUrl(url) .Build(); hubConnection = connection; connection.On<int, string>("SendCmd", (cmd, data) => { switch (cmd) { case 10001: if (scheduler == null) { InJobAsync().Wait(); } else { if (scheduler.IsStarted != true) { InJobAsync().Wait(); } else { connection.SendAsync("ClientMsg", "正在运行"); } } break; case 10010: var send = 10; Int32.TryParse(data, out send); if (scheduler != null) scheduler.Clear(); InJobAsync(send).GetAwaiter().GetResult(); break; default: connection.SendAsync("ClientMsg", "未知命令"); break; } }); connection.Closed += e => { if (e != null) { Console.WriteLine("Connection closed..." + e.Message); } else { Console.WriteLine("开始重连..." + e.Message); } Reconnect(); return Task.CompletedTask; }; try { Console.WriteLine($"开始连接服务器[{urlstr}]"); await connection.StartAsync(); stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double seconds = timespan.TotalSeconds; // 总秒数 Console.WriteLine($"耗时:{seconds} 服务器[{urlstr}]连接成功!"); return true; } catch (Exception err) { stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double seconds = timespan.TotalSeconds; // 总秒数 var meg = $"执行时间:{seconds} 连接失败:{err.Message}"; Console.WriteLine(meg); return false; } }
public static StdSchedulerFactory factory = null; public static IScheduler scheduler = null; public static async Task InJobAsync(int iInterval = 10) { if (factory == null) { factory = new StdSchedulerFactory(); } if (scheduler == null) { scheduler = await factory.GetScheduler(); } // 启动任务调度器 await scheduler.Start(); IJobDetail job = JobBuilder.Create<FlowerJob>() .WithIdentity("job1", "group1") .WithDescription("定时数据传送") .Build(); ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity("trigger1") // 给任务一个名字 //.StartAt(myStartTime) // 设置任务开始时间 .ForJob("job1", "group1") //给任务指定一个分组 .WithSimpleSchedule(x => x .WithIntervalInSeconds(iInterval) //循环的时间 .RepeatForever()) .Build(); // 开启任务调度器 await scheduler.ScheduleJob(job, trigger); }
Jobs任务
public class FlowerJob : IJob { public Task Execute(IJobExecutionContext context) { //Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行任务:"+context.JobDetail.Description); //逻辑代码 return Task.CompletedTask; } }
内容总结
以上是互联网集市为您收集整理的Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务全部内容,希望文章能够帮你解决Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。