Background Jobs 呼叫介面時間長解決
阿新 • • 發佈:2021-09-01
- 編寫工作類
public class UTaskEventHanlder : BackgroundJob<UpByTermIdInput>, ITransientDependency { private readonly IRepository<EvaluationSystem.EntityDesign.ClassManage, Guid> _classManageRepository; private readonly ICacheManager _cacheManager; private readonly IBackgroundJobManager _backgroundJobManager; public UTaskEventHanlder(IRepository<EvaluationSystem.EntityDesign.ClassManage, Guid> classManageRepository, ICacheManager cacheManager, IBackgroundJobManager backgroundJobManager) { _backgroundJobManager = backgroundJobManager; _cacheManager = cacheManager; _classManageRepository = classManageRepository; } [UnitOfWork] public override void Execute(UpByTermIdInput input) { try { UnitOfWorkManager.Current.SetTenantId(1); //查詢任務刪除 保證執行一次 var ts = _cacheManager.GetCache("_AutoUpClass_" + input.TaskId).GetOrDefault("_AutoUpClass_" + input.TaskId); if (ts != null) { var d= (UpByTermIdTaskInfo)ts; _backgroundJobManager.Delete(d.JobId); } //......省略程式碼 _cacheManager.GetCache("_AutoUpClass_" + input.gId).Set("_AutoUpClass_" + input.gId, new UpByTermIdTaskInfo { Status = 0, Msg = "執行中", TaskId = input.gId, Progress = $"{1}/{3}" }); //......省略程式碼 _cacheManager.GetCache("_AutoUpClass_" + input.gId).Set("_AutoUpClass_" + input.gId, new UpByTermIdTaskInfo { Status = 1, Msg = "成功", TaskId = input.gId, Progress = $"{3}/{3}" }); CurrentUnitOfWork.SaveChanges(); } catch (Exception e) { _cacheManager.GetCache("_AutoUpClass_" + input.gId).Set("_AutoUpClass_" + input.gId, new UpByTermIdTaskInfo { Status = 2, Msg = "失敗", TaskId = input.gId}); } } }
-
呼叫
public async Task<UpByTermIdTaskInfo> AutoUpClassTestAsync(UpByTermIdInput input) { if (!string.IsNullOrEmpty(input.TaskId)) { //查詢狀態 var ts = _cacheManager.GetCache("_AutoUpClass_" + input.TaskId).GetOrDefault("_AutoUpClass_" + input.TaskId); if (ts != null) return (UpByTermIdTaskInfo)ts; else return new UpByTermIdTaskInfo { Status = 2, TaskId = input.TaskId, Msg = "失敗" }; } else { //首次 string g = Guid.NewGuid().ToString(); var a=await _backgroundJobManager.EnqueueAsync<UTaskEventHanlder, UpByTermIdInput>( new UpByTermIdInput { oldTermId=input.oldTermId,newTermId=input.newTermId,schoolId=input.schoolId,TaskId= g, gId=g}); //設定查詢 var taskInfo = new UpByTermIdTaskInfo { Status = 0, Msg = "執行中", TaskId = g,JobId=a }; _cacheManager.GetCache("_AutoUpClass_" + g).Set("_AutoUpClass_" + g, taskInfo, TimeSpan.FromMinutes(10)); return taskInfo; } }
引用https://aspnetboilerplate.com/Pages/Documents/Background-Jobs-And-Workers#background-jobs
及https://www.cnblogs.com/wangyinlon/p/15160497.html