Exemple #1
0
 /// <summary>
 /// 创建新的应用程序域,返回运行时的Job数据
 /// </summary>
 /// <param name="jobInfo"></param>
 internal JobRuntimeInfo CreateJobRuntimeInfo(JobInfo jobInfo)
 {
     lock (Locker)
     {
         //JobRuntimeInfo jobRuntimeInfo = null;
         //if (JobPool.ContainsKey(jobInfo.Id))
         //{
         //    jobRuntimeInfo = GetJobFromPool(jobInfo.Id);
         //    return jobRuntimeInfo;
         //}
         AppDomain       app            = Thread.GetDomain();
         BaseJob.BaseJob job            = AppDomainLoader.Load(jobInfo.AssemblyPath, jobInfo.ClassType, out app);
         JobRuntimeInfo  jobRuntimeInfo = new JobRuntimeInfo
         {
             JobInfo   = jobInfo,
             Job       = job,
             AppDomain = app,
         };
         //TODO:日志记录
         return(jobRuntimeInfo);
     }
 }
Exemple #2
0
        /// <summary>
        /// 线程池有job,但是该job的应用程序域已经卸载(一般都是宕机),替换job池中的jobRuntimeInfo,并重新调度该job
        /// </summary>
        /// <param name="jobRuntimeInfo"></param>
        /// <returns></returns>
        internal bool ReplaceJobRuntimeInfo(JobRuntimeInfo jobRuntimeInfo)
        {
            //TODO:有BUG,没有地方还原 _flag 的值
            //if (_flag)
            //{
            //    return true;
            //}

            lock (Locker)
            {
                //if (_flag)
                //{
                //    return true;
                //}
                AppDomain app = Thread.GetDomain();
                jobRuntimeInfo.Job                 = AppDomainLoader.Load(jobRuntimeInfo.JobInfo.AssemblyPath, jobRuntimeInfo.JobInfo.ClassType, out app);
                jobRuntimeInfo.AppDomain           = app;
                JobPool[jobRuntimeInfo.JobInfo.Id] = jobRuntimeInfo;
                //_flag = true;
                return(true);
            }
        }