Использование 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
nl ja 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, источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)