private void CallHost(StrongIdentifierValue methodName, KindOfFunctionParameters kindOfParameters, Dictionary <StrongIdentifierValue, Value> namedParameters, List <Value> positionedParameters, bool isSync) { #if DEBUG //Log($"methodName = {methodName}"); //Log($"kindOfParameters = {kindOfParameters}"); //Log($"namedParameters = {namedParameters.WriteDict_1_ToString()}"); //Log($"positionedParameters = {positionedParameters.WriteListToString()}"); //Log($"isSync = {isSync}"); #endif var command = new Command(); command.Name = methodName; switch (kindOfParameters) { case KindOfFunctionParameters.NoParameters: break; case KindOfFunctionParameters.NamedParameters: command.ParamsDict = namedParameters.ToDictionary(p => p.Key, p => p.Value); break; case KindOfFunctionParameters.PositionedParameters: command.ParamsList = positionedParameters.ToList(); break; default: throw new ArgumentOutOfRangeException(nameof(kindOfParameters), kindOfParameters, null); } #if DEBUG //Log($"command = {command}"); #endif var processCreatingResult = _hostListener.CreateProcess(command); #if DEBUG //Log($"processCreatingResult = {processCreatingResult}"); #endif if (processCreatingResult.IsSuccessful) { var processInfo = processCreatingResult.Process; processInfo.ParentProcessInfo = _currentCodeFrame.ProcessInfo; _instancesStorage.AppendAndTryStartProcessInfo(processInfo); if (isSync) { ProcessInfoHelper.Wait(processInfo); } _currentCodeFrame.CurrentPosition++; return; } throw new NotImplementedException(); }
private static void TstWaitIProcessInfo() { _logger.Log("Begin"); var processInfo = new ProcessInfo(); var task = new Task(() => { processInfo.Status = ProcessStatus.Running; Thread.Sleep(10000); processInfo.Status = ProcessStatus.Completed; }); task.Start(); _logger.Log("task.Start()"); ProcessInfoHelper.Wait(processInfo); _logger.Log("End"); }