public void Notify(Guid idSession, int idOperation, string[] outputs) { lock (lockUpdateStatus) { OperationStatus operationSt = sessionStatus[idSession].operationStatus[idOperation]; if (outputs != null) { SessionUtilities.OperationCompleted(operationSt, outputs); ComputationGraph session = sessionDictionary[idSession]; SessionUtilities.UpdateMnemonicValues(sessionStatus[idSession].mnemonicsTable, session.Operations[idOperation].Output, outputs); GetLogSession(idSession); if (!SessionUtilities.SessionCompleted(sessionStatus[idSession].operationStatus)) { List <int> idAvailableOperation = SessionUtilities.GetIDAvailableOperation( sessionStatus[idSession].operationStatus, sessionDictionary[idSession].Dependecies); OperationsToExecute(idSession, idAvailableOperation); } else { StopSession(idSession); } } else { SessionUtilities.OperationFaild(operationSt); StopSession(idSession); } } }
public void StopSession(Guid id) { ComputationGraph session = sessionDictionary[id]; SessionStatus status = sessionStatus[id]; if (SessionUtilities.SessionCompleted(status.operationStatus)) { Console.WriteLine("Session COMPLITED"); return; //сессия закончена - всё ОК } else if (SessionUtilities.SessionFaild(status.operationStatus)) { foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits)) { operation.status = StatusEnum.Aborted; } Console.WriteLine("Session FAILD"); //одна операция сломалась значит другие отменяем //в целом сессия Faild } else { foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits)) { operation.status = StatusEnum.Aborted; } Console.WriteLine("Session Aborted"); //сессия была отменена пользователем //в целом сессия Aborted } }