Usando a tarefa async / await e retornando <HttpResponseMessage> dos métodos da API da Web do ASP.NET

Eu tenho um método de biblioteca de classes 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();
    }
}

Meu método ASP.NET Web Api tem esta aparência:

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

Quais são as implicações de retornar uma tarefa na API da Web? Isso é permitido? A única razão que eu quero usar é para que eu possa usar uma biblioteca de classes portátil (PCL). Qual é a melhor prática? Devo ter uma versão síncrona do meu método e uma versão assíncrona? Quais são as implicações de desempenho e legibilidade de código e de manutenção?

Também eu teria o mesmo efeito se voltasseTask<string> ao invés deTask<HttpResponseMessage>?

questionAnswers(1)

yourAnswerToTheQuestion