public async Task <object> ExecuteCommand(object command) { JObject cmd = command as JObject; string commandName = cmd.GetValue("CommandName").Value <string>(); Type commandType = CommandRouter.GetCommandType(commandName); Type commandHandler = CommandRouter.GetHandler <CommandHandler>(commandName); object deserializedCommand = cmd.ToObject(commandType); return(await Task.Run(() => { CommandHandler handler = Activator.CreateInstance(commandHandler, new object[] { deserializedCommand }) as CommandHandler; using (ICommandResult commandResult = handler.Handle()) { if ((deserializedCommand as Command).CompressResult) { byte[] byteArray = commandResult.ToByteArray(); object compressed = ObjectCompressor.Compress(byteArray); return compressed; } return commandResult; } })); }