Использование async/wait и return Task <HttpResponseMessage> Из методов веб-API ASP.NET

У меня есть метод Portable Class Library (PCL), например:

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

Мой метод ASP.NET Web Api выглядит следующим образом:

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

Каковы последствия возврата задачи в веб-API. Это разрешено? Единственная причина, по которой я хочу использовать await, - это то, что я могу использовать Portable Class Library (PCL). Какова наилучшая практика? Должен ли я иметь синхронную версию моего метода и асинхронную версию? Каковы показатели удобочитаемости и совместимости кода?

Also would I have the same effect if I returned Task rather than Task?

9
добавлено отредактировано
Просмотры: 2
de
Я также хочу знать, каковы показатели производительности и кода, а также возможности для их поддержки?
добавлено автор Muhammad Rehan Saeed, источник
Я верю, что ASP.NET в .Net 4.5 поддерживает методы async , поэтому ваш код должен работать. Почему вы спрашиваете, разрешено ли это? Вы не попробовали?
добавлено автор svick, источник

1 ответы

Async and await are perfectly acceptable in ASP.NET. Here's a Scott Handselman video demoing it: http://www.asp.net/vnext/overview/aspnet/async-and-await

"Also would I have the same effect if I returned Task rather than Task?"

Not really sure what you mean by this. The Task is like a container for the object, so a Task would contain your string result and a Task would contain your HttpResponseMessage result... Is that what you mean? I think either method is perfectly acceptable. If you just need the string, then go with that. No point in returning more than you need.

4
добавлено
В Web API вы можете вернуть любой объект, который вы хотите сериализовать в качестве содержимого, или вернуть HttpResponseMessage. Это то, что я имел в виду.
добавлено автор Muhammad Rehan Saeed, источник
Я все еще не следую за тобой. Имейте в виду, что он не возвращает строку, а Task . Строка в Task .Result может быть отображена как содержимое, но сама задача не может.
добавлено автор Pete, источник
Возврат строки и возврат HttpResponseMessage с помощью StringContent и две разные вещи. Если вы вернете строку, WebAPi будет использовать согласование контента для поиска форматирования, который может сериализовать эту строку. Если вы вернете StringContent, эта строка выходит непосредственно в ответ. Но возврат Task , который заканчивается в конце концов с помощью строки, должен быть эквивалентен возврату этой строки непосредственно в WebAPI.
добавлено автор Youssef Moussaoui, источник