Exemplo n.º 1
0
        private async Task <RemoteInvokeResponse> InvokeMethod(MethodInfo methodInfo, Object instance, object[] parameters)
        {
            var result = methodInfo.Invoke(instance, parameters.ToArray());

            if (methodInfo.ReturnType == typeof(void) || methodInfo.ReturnType == typeof(Task))
            {
                return(RemoteInvokeResponse.CreateSuccess(null));
            }
            object resultObj;

            if (result.GetType().IsGenericType&& result.GetType().GetGenericTypeDefinition() == typeof(Task <>))
            {
                if (result.GetType().GetGenericArguments().Count() > 1)
                {
                    return(RemoteInvokeResponse.CreateFail("不支持多个泛型参数的方法"));
                }

                var task = (Task)result;
                await task.ConfigureAwait(false);

                resultObj = task.GetType().GetProperty("Result").GetValue(task);
            }
            else
            {
                resultObj = result;
            }
            if (resultObj == null)
            {
                return(RemoteInvokeResponse.CreateSuccess(null));
            }
            else
            {
                return(RemoteInvokeResponse.CreateSuccess(serializer.Serialize(resultObj)));
            }
        }