private void AddIsStopDic(string taskId) { IsStopDic.AddOrUpdate(taskId, false, (key, vale) => { key = taskId; vale = false; return(true); }); }
/// <summary> /// 手动抛出异常结束本次任务 /// 完成资源清理 /// </summary> public void ThrowException(string taskId, string msg) { bool isStop = false; if (IsStopDic.TryGetValue(taskId, out isStop)) { if (isStop) { //回收资源 Log.WriteLog("Manul stop Exception"); throw new Exception(msg); } } }
public void ChangeValueIsStop(string taskId, HandEnum handEnum) { if (IsStopDic.ContainsKey(taskId)) { try { Log.WriteLog("Change IsStop to true"); IsStopDic[taskId] = true; //放开等待锁 MemoryCache.Instence().Set(taskId, handEnum); } catch (Exception ex) { } } }
/// <summary> /// 回收资源,必须在upload跟load方法finally中调用 /// </summary> /// <param name="taskId"></param> public void RecycleResource(string taskId) { if (_lockDic.ContainsKey(taskId)) { lock (_lockDic[taskId]) { if (ReferenceCount.ContainsKey(taskId)) { ReferenceCount[taskId] -= 1; if (ReferenceCount[taskId] == 0) { bool result = IsStopDic.TryRemove(taskId, out result); if (!result) { Log.WriteLog("Recycel isStop failed"); } MemoryCache.Instence().Recycle(taskId); _lockDic.Remove(taskId); ReferenceCount.Remove(taskId); } } } } }