private Task <object> InvokeMethod_Impl(GrainReference reference, InvokeMethodRequest request, string debugContext, InvokeMethodOptions options) { if (debugContext == null && USE_DEBUG_CONTEXT) { if (USE_DEBUG_CONTEXT_PARAMS) { #pragma warning disable 162 // This is normally unreachable code, but kept for debugging purposes debugContext = GetDebugContext(reference.InterfaceName, reference.GetMethodName(reference.InterfaceId, request.MethodId), request.Arguments); #pragma warning restore 162 } else { var hash = reference.InterfaceId ^ request.MethodId; if (!debugContexts.TryGetValue(hash, out debugContext)) { debugContext = GetDebugContext(reference.InterfaceName, reference.GetMethodName(reference.InterfaceId, request.MethodId), request.Arguments); debugContexts[hash] = debugContext; } } } // Call any registered client pre-call interceptor function. CallClientInvokeCallback(reference, request); if (this.filters?.Length > 0) { return(InvokeWithFilters(reference, request, debugContext, options)); } return(SendRequest(reference, request, debugContext, options)); }
private Task <object> InvokeMethod_Impl(GrainReference reference, InvokeMethodRequest request, string debugContext, InvokeMethodOptions options) { if (debugContext == null && USE_DEBUG_CONTEXT) { if (USE_DEBUG_CONTEXT_PARAMS) { #pragma warning disable 162 // This is normally unreachable code, but kept for debugging purposes debugContext = GetDebugContext(reference.InterfaceName, reference.GetMethodName(reference.InterfaceId, request.MethodId), request.Arguments); #pragma warning restore 162 } else { var hash = reference.InterfaceId ^ request.MethodId; if (!debugContexts.TryGetValue(hash, out debugContext)) { debugContext = GetDebugContext(reference.InterfaceName, reference.GetMethodName(reference.InterfaceId, request.MethodId), request.Arguments); debugContexts[hash] = debugContext; } } } // Call any registered client pre-call interceptor function. CallClientInvokeCallback(reference, request); bool isOneWayCall = ((options & InvokeMethodOptions.OneWay) != 0); var resolver = isOneWayCall ? null : new TaskCompletionSource <object>(); this.RuntimeClient.SendRequest(reference, request, resolver, this.responseCallbackDelegate, debugContext, options, reference.GenericArguments); return(isOneWayCall ? null : resolver.Task); }