2015-08-29 2 views
2

Следующие строки терпят неудачу в указанной строке.`await HttpClient.GetAsync()` терпит неудачу - приложение командной строки DNX

using (var ht = new HttpClient()) 
{ 
    var r = await ht.GetAsync(RootUrl + Id.ToString()); <----- 
    Page = await r.Content.ReadAsStringAsync(); 
} 

Никаких исключений, никаких ошибок, нет ничего. Выполнение просто останавливается, не ударяет точку останова на следующей строке, и приложение завершает работу. Окружение в try/catch не вызывает уловки.

Выполнение приложения командной строки DNX .xproj.

Такое же поведение, как и для coreclr, так и для полного. Началось как через VS, так и с командной строки DNX.

Что, черт возьми, происходит?

Project.json выглядит следующим образом:

{ 
    "version": "1.0.0-*", 
    "description": "Scrapers Console Application", 
    "authors": [ "Kaelan" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 

    "dependencies": { 

     "System.Net.Http": "4.0.0-*", 
     "HtmlAgilityPack": "1.4.9" 
    }, 

    "commands": { 
    "Scrapers": "Scrapers" 
    }, 

    "frameworks": { 
    "dnx451": { } 
    } 
} 

Edit: Полный код я работаю с. Взял кусок фактического проекта для тестирования (поддерживает ту же проблему).

public class Program 
{ 
    const string RootUrl = "<-snipped->"; 
    public async void Main(string[] args) 
    { 
     var Id = 244; 

     var Page = ""; 

     using (var ht = new HttpClient()) 
     { 
      var r = await ht.GetAsync(RootUrl + Id.ToString()); 
      Debug.Write(r.StatusCode + " on page: " + Id.ToString()); 

      Page = await r.Content.ReadAsStringAsync(); 
     } 

     Console.ReadLine(); 
    } 
} 
+0

Почтовый исполняемый код. – usr

+0

Не добавляет много, но см. Отредактированный –

+0

Не должно ли быть предупреждение компилятора для async Main? Кстати, репо указывало на решение. См. Ответ. – usr

ответ

2

Вы должны избегать async void.

Измените тип возврата на соответствующий асинхронный тип возврата для методов без значений результата: Task.

+0

Хороший совет (и может быть хорошим комментарием), но каким образом этот пост отвечает на вопрос? – Eser

+2

@Eser: он предотвращает выход консольного приложения dnx до завершения HTTP-запроса. Таким образом, это ответ, а не комментарий. –

+0

Я ... на самом деле никогда не думал об этом. Благодарю. –

Смежные вопросы