Punto muerto con ContinueWiths en WebAPI

Nos hemos encontrado con muchos puntos muertos como parte de exponer parte del código existente a través de la API web. He podido resolver el problema con este ejemplo muy simple que se quedará para siempre:

public class MyController : ApiController
{
    public Task Get()
    {
        var context = TaskScheduler.FromCurrentSynchronizationContext();

        return Task.FromResult(1)
            .ContinueWith(_ => { }, context)
            .ContinueWith(_ => Ok(DateTime.Now.ToLongTimeString()), context);
    }
}

Para mí, ese código parece bastante simple. Esto puede parecer un poco artificial, pero eso es solo porque he intentado simplificar el problema tanto como sea posible. Parece que tener dos ContinueWiths encadenados de esta manera provocará el punto muerto: si comento el primer ContinueWith (que en realidad no está haciendo nada de todos modos), funcionará bien. También puedo 'arreglarlo' al no dar el planificador específico (pero esa no es una solución viable para nosotros ya que nuestro código real debe estar en el hilo correcto / original). Aquí, he puesto los dos ContinueWiths uno al lado del otro, pero en nuestra aplicación real hay mucha lógica que está sucediendo y los ContinueWiths terminan viniendo de diferentes métodos.

Sé que podría volver a escribir este ejemplo en particular usando async / wait y simplificaría las cosas y parece solucionar el punto muerto. Sin embargo, tenemos una tonelada de código heredado que se ha escrito en los últimos años, y la mayor parte se escribió antes de que saliera async / wait, por lo que utiliza ContinueWith's en gran medida. Reescribir toda esa lógica no es algo que nos gustaría hacer ahora si podemos evitarlo. Un código como este ha funcionado bien en todos los demás escenarios con los que nos hemos encontrado (aplicación de escritorio, aplicación Silverlight, aplicación de línea de comandos, etc.): es solo la API web la que nos está dando estos problemas.

¿Hay algo que se pueda hacer?genéricamente que puede resolver este tipo de punto muerto? Estoy buscando una solución que, con suerte, no implique reescribir todos los ContinueWith's para usar async / await.

Actualizar:

El código anterior es el código completo en mi controlador. He intentado hacer que esto sea reproducible con la mínima cantidad de código. Incluso he hecho esto en una nueva solución. Los pasos completos que hice:

Desde Visual Studio 2013 Update 1 en Windows 7 (con .NET Framework 4.5.1), cree un nuevo proyecto utilizando la plantilla de aplicación web ASP.NETSeleccione API web como plantilla (en la siguiente pantalla)Reemplace el método Get () en el ValuesController creado automáticamente con el ejemplo dado en mi código originalPresione F5 para iniciar la aplicación y navegue hasta ./api/values: la solicitud se bloqueará para siempreTambién he intentado alojar el sitio web en IIS (en lugar de usar IIS Express)También intenté actualizar todos los diversos paquetes de Nuget, así que estaba al tanto de todo

Web.config no ha sido tocado por lo que creó la plantilla. Específicamente, tiene esto:

<system.web>
   <compilation debug="true" targetFramework="4.5" />
   <httpRuntime targetFramework="4.5" />
</system.web>

Respuestas a la pregunta(3)

Su respuesta a la pregunta