protected override NodeMatchResult HandleRemoteNode <T>(MatchNodeArg <T> args) { // prepare pattern for remote partial search Pattern pattern = this.pattern.Copy(); pattern.CurrentNode = args.NodeToMatch.Id; pattern.CurrentPatternNodeName = args.PatternNode.Name; this.State = PartialMatchState.Pending; IPartialMatchResult result = null; using (MatcherMetric.RegisterWaitTime("partial remote match")) { result = Framework.BeginFindPartialMatch(args.RemotePartitionId, pattern); result.Wait(); } bool matched = result.MatchedPattern.GetMatchedNodes().Count() > pattern.GetMatchedNodes().Count; Pattern remotePattern = (Pattern)result.MatchedPattern; this.pattern.Merge(remotePattern); this.State = PartialMatchState.Running; return(new NodeMatchResult(matched, remotePattern.MatchedFullSubpattern)); }