zoukankan      html  css  js  c++  java
  • Background Jobs 调用接口时间长解决

    1. 编写工作类
    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});
                }
               
            }
        }
    
    1. 调用

       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

  • 相关阅读:
    湖湘杯2020misc
    BUUOJ(Misc)
    BUUOJ(Web)
    网络信息安全攻防学习平台
    CTFHub web部分题解
    BugkuCTF 部分WP(搬运了很多WP)
    Web安全之机器学习入门 第2章-第5章学习笔记
    结构体
    排序的使用
    字符串和日期
  • 原文地址:https://www.cnblogs.com/zmldz/p/15215215.html
Copyright © 2011-2022 走看看