jquery cuando / luego (también cuando / hecho) no espera

He visto muchas muestras que usan esta sintaxis, pero no puedo ver qué estoy haciendo mal. La función "entonces" se está ejecutando antes de que vuelva la llamada ajax.

También intenté usar $ .deferred y algunos otros patrones en vano.

¿Alguien puede ver lo que me falta?

He depurado y puedo ver las llamadas que se realizan desde dentro de hecho / luego antes de que la llamada ajax devuelva sus datos de éxito (o error).

Gracias por cualquier ayuda.

Llamada principal:

this.addFirstTask = function(task) {
    var totalHours = GetHours();
    $.when(totalHours).done(function (data) {
        task.TaskHours(data);
        self.add(task);
    });
};

Está llamando a la siguiente función ajax:

function GetHours() {
    $.ajax({
        url: "/api/tst/GetMyData",
        type: 'GET',
        dataType: 'json',

        success: function(data) {
           return data;
        },

        error: function(data) {
            return 0;
        }
    });
};

¡Gracias!

Post mortem:

Además de agregar el retorno a la llamada ajax, según un consejo adicional, eliminé el éxito y el error de la llamada ajax y cambié addFirstTask a:

this.addFirstTask = function(task) {
    var totalHours = GetHours();
    $.when(totalHours)
     .then(function (data) {task.TaskHours(data);})
     .done(function () { self.add(task); });
};

Si GetHours tiene éxito, actualizo el valor de TaskHours. Si falla, lo omito. Me di cuenta de que HECHO es como "FINALMENTE" en el intento / captura de .NET. Entonces, en lugar de agregar la tarea de inmediato y luego dejar que mi enlace observable lo actualice cuando regrese el valor, incluso el self.add es parte de la llamada asincrónica.

Respuestas a la pregunta(2)

Su respuesta a la pregunta