public async Task <RemoteInvokeResponse> Invoke(RemoteInvokeRequest request) { try { var transport = RemoteInvokeTransport <RemoteInvokeRequest> .CreateRequest(request); var callbackTask = RegisterCallbackAsync(transport.Id); try { var package = new Package { Type = PackageType.Transfer, Data = serializer.Serialize(transport) }; await networkClient.SendAsync(package); } catch (Exception ex) { throw new EasyRpcException("执行远程方法失败", ex); } return(await callbackTask); } catch (Exception ex) { throw new EasyRpcException("执行远程方法失败", ex); } }
public object InterceptAsync(MethodInfo method, object[] parameters) { var request = RemoteInvokeRequest.Create(method, parameters); var response = AsyncHelper.RunSync(() => remoteInvoker.Invoke(request)); if (method.ReturnType == typeof(void)) { return(null); } if (method.ReturnType == typeof(Task)) { return(Task.CompletedTask); } if (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task <>)) { var returnValueType = method.ReturnType.GetGenericArguments()[0]; var resultValue = serializer.Deserialize(response.Data, returnValueType); return(Task.FromResult(resultValue)); } else { return(serializer.Deserialize(response.Data, method.ReturnType)); } }