Queue <ExpressionBuilder> DoAdd(WorkflowRuntimeException value) { var key = value.InnerException; if (key != null) { var nestedKey = key as WorkflowRuntimeException; if (nestedKey != null) { var callStack = DoAdd(nestedKey); if (callStack != null) { callStack.Enqueue(value.Builder); return(callStack); } } else { var weakKey = new WeakKey <Exception>(key); if (exceptions.ContainsKey(weakKey)) { return(null); } CollectUnusedExceptions(); var callStack = new Queue <ExpressionBuilder>(); callStack.Enqueue(value.Builder); exceptions.Add(weakKey, callStack); return(callStack); } } return(null); }
public bool TryAdd(WorkflowRuntimeException value) { if (value == null) { throw new ArgumentNullException("value"); } return(DoAdd(value) != null); }
public bool TryGetValue(Exception key, out WorkflowException value) { if (key == null) { throw new ArgumentNullException(nameof(key)); } value = null; var weakKey = new WeakKey <Exception>(key); var result = exceptions.TryGetValue(weakKey, out Queue <ExpressionBuilder> callStack); if (result) { while (callStack.Count > 0) { var builder = callStack.Dequeue(); value = new WorkflowRuntimeException(key.Message, builder, value ?? key); } } return(result); }