public CausalityNode GetOrCreate(ClrInstance instance, NodeKind kind) { if (instance.ObjectAddress == null) { throw new InvalidOperationException($"instance.ObjectAddress should not be null. Instance: {instance}."); } //var node = _nodes.GetOrAdd(instance, task => new CausalityNode(this, task, kind: kind)); //_nodesByAddress.GetOrAdd(node.TaskInstance.ObjectAddress.Value, node); var node = _nodesByAddress.GetOrAdd(instance.ObjectAddress.Value, _ => CausalityNode.Create(this, instance, kind: kind)); return(node); }
public CausalityNode GetNode(ClrInstance instance) { Contract.AssertNotNull(instance.ObjectAddress); return(_nodesByAddress.GetOrAdd(instance.ObjectAddress.Value, task => CausalityNode.Create(this, instance, kind: NodeKind.Unknown))); }