Código de ejecución de Symfony después de que se envió la respuesta

Eché un vistazo aesta otra pregunta. Estoy buscando una manera de hacer lo que el OP de esa pregunta también quiere, y eso escontinuar procesando php después de enviar la respuesta http, pero en Symfony2.

Implementé un evento que se dispara después de cada terminación del kernel. Hasta ahora todo bien, pero lo que quiero es que se active después de CIERTAS terminaciones, en acciones específicas del controlador, por ejemplo, después de que se envió un formulario, no todas las veces en cada solicitud. Esto se debe a que quiero hacer algunas tareas pesadas en ciertos momentos y no quiero que el usuario final espere a que se cargue la página.

¿Alguna idea de cómo puedo hacer eso?

<?php


namespace MedAppBundle\Event;

use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use JMS\DiExtraBundle\Annotation\Inject;
/**
 * Class MedicListener
 * @package MedAppBundle\EventListener
 * @Service("medapp_test.listener")
 * @Tag(name="kernel.event_subscriber")
 */
class TestListener implements EventSubscriberInterface
{
    private $container;

    private $logger;

    /**
     * Constructor.
     *
     * @param ContainerInterface $container A ContainerInterface instance
     * @param LoggerInterface $logger A LoggerInterface instance
     * @InjectParams({
     *     "container" = @Inject("service_container"),
     *     "logger" = @Inject("logger")
     * })
     */
    public function __construct(ContainerInterface $container, LoggerInterface $logger = null)
    {
        $this->container = $container;
        $this->logger = $logger;
    }

    public function onTerminate()
    {
      $this->logger->notice('fired');
    }

    public static function getSubscribedEvents()
    {
        $listeners = array(KernelEvents::TERMINATE => 'onTerminate');

        if (class_exists('Symfony\Component\Console\ConsoleEvents')) {
            $listeners[ConsoleEvents::TERMINATE] = 'onTerminate';
        }

        return $listeners;
    }
}

Hasta ahora, he suscrito el evento al kernel.terminate, pero obviamente esto lo activa en cada solicitud. Lo hice similar al de SwiftmailerEmailSenderListener

Se siente un poco extraño que el núcleo debe escuchar cada vez este evento, incluso cuando no se activa. Prefiero que se dispare solo cuando sea necesario, pero no estoy seguro de cómo hacerlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta