Quizas hay algo que me este perdiendo, pero cual es el sentido del listener? No se esta ejecutando todo el codigo de este metodo en un mismo thread?
Me parece que quedaria mas limpio el codigo si no usas un listener y  haces aca directamente el try/finally, y lo sacas del SynchronizationService.