Uso de async / await y devolución de la tarea <HttpResponseMessage> de los métodos de la API web ASP.NET

Tengo un método de biblioteca de clases portátil (PCL) como este:

public async Task<string> GetLineStatuses()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
    using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
    {
        return response.GetResponseStream().ReadAllText();
    }
}

Mi método ASP.NET Web Api se ve así:

public async Task<HttpResponseMessage> Get()
{
    HttpResponseMessage response = new HttpResponseMessage();
    string statuses = await service.GetStatuses();
    response.Content = new StringContent(statuses);
    return response;
}

¿Cuáles son las implicaciones de devolver una tarea en la API web? ¿Está esto permitido? La única razón por la que quiero usar await es para poder usar una biblioteca de clases portátil (PCL). cual es la mejor practica? ¿Debo tener una versión sincrónica de mi método y una versión asíncrona? ¿Cuáles son las implicaciones de rendimiento, legibilidad y mantenibilidad del código?

También tendría el mismo efecto si volvieraTask<string> más bien queTask<HttpResponseMessage>?

Respuestas a la pregunta(1)

Su respuesta a la pregunta