private OutputObject AddOutputObject(IExecuteContext executeContext, ObjectUrl outputObjectUrl, ObjectId outputObjectId, Command command) { OutputObject outputObject; if (!outputObjects.TryGetValue(outputObjectUrl, out outputObject)) { // New item? outputObject = new OutputObject(outputObjectUrl, outputObjectId); outputObjects.Add(outputObjectUrl, outputObject); } else { // ObjectId should be similar (if no Wait happened), otherwise two tasks spawned with same parameters did output different results if (outputObject.ObjectId != outputObjectId && outputObject.Counter == mergeCounter) { var error = string.Format("Commands {0} and {1} are both writing {2} at the same time", command, outputObject.Command, outputObjectUrl); executeContext.Logger.Error(error); throw new InvalidOperationException(error); } // Update new ObjectId outputObject.ObjectId = outputObjectId; } // Update Counter so that we know if a wait happened since this output object has been merged. outputObject.Counter = mergeCounter; outputObject.Command = command; return(outputObject); }
internal OutputObject AddOutputObject(IExecuteContext executeContext, ObjectUrl outputObjectUrl, ObjectId outputObjectId, Command command) { OutputObject outputObject; if (!outputObjects.TryGetValue(outputObjectUrl, out outputObject)) { // New item? outputObject = new OutputObject(outputObjectUrl, outputObjectId); outputObjects.Add(outputObjectUrl, outputObject); } else { // ObjectId should be similar (if no Wait happened), otherwise two tasks spawned with same parameters did output different results if (outputObject.ObjectId != outputObjectId && outputObject.Counter == mergeCounter) { var error = string.Format("Commands {0} and {1} are both writing {2} at the same time", command, outputObject.Command, outputObjectUrl); executeContext.Logger.Error(error); throw new InvalidOperationException(error); } // Update new ObjectId outputObject.ObjectId = outputObjectId; } // Update Counter so that we know if a wait happened since this output object has been merged. outputObject.Counter = mergeCounter; outputObject.Command = command; return outputObject; }