internal static ReturnInfo Execute(Action <Action> invokeCore, VarPool varManager, TypeFinder typeFinder, ProtocolInfo info)
        {
            IAsyncInvoke invoke = new AsyncExecute(invokeCore);

            if (info.ProtocolType == ProtocolType.Operation)
            {
                invoke = new SyncExecute(invokeCore);
                var executeCheck = varManager.Add(false);
                var args         = new List <object>(info.Arguments);
                args.Insert(0, executeCheck);
                info = new ProtocolInfo(info.ProtocolType, info.OperationTypeInfo, info.VarAddress,
                                        info.TypeFullName, info.Operation, args.ToArray());
                try
                {
                    return(Execute(invoke, varManager, typeFinder, info));
                }
                finally
                {
                    varManager.Remove(executeCheck);
                }
            }
            else
            {
                return(Execute(invoke, varManager, typeFinder, info));
            }
        }
 static ReturnInfo BinOff(VarPool varManager, ProtocolInfo info)
 {
     varManager.Remove(info.VarAddress);
     return(new ReturnInfo());
 }