Wpis z mikrobloga

Drogie mirki,
robię .NET program, który ma wyświetlić treść html strony w formie stringa.

Napisałem poniższy kod, tylko mam pytanie: dlaczego, gdy usunę Console.ReadLine() z maina, to program nie wyświetla mi żadnego wyniku?
Zupełnie jakby się nie wykonywała, bo na przykład kiedy zamienię "Console.ReadLine()" na "Console.WriteLine("test");", to wypisuje mi samo "test", mimo że powyższa instrukcja nakazuje wypisać zawartość strony.

Mógłby mi to ktoś wyjaśnić?
Z góry dzięki za odpowiedź

#csharp #pytanie #programowanie #dotnet #programista15k
PtakDlaKarmnikow - Drogie mirki, 
robię .NET program, który ma wyświetlić treść html...

źródło: comment_x69jIneL4oc2WRncRdHG5nsmtxwgqHxY.jpg

Pobierz
  • 22
  • Odpowiedz
@abuson: @SamBeliar: @jeski: @passage:

tylko właśnie najdziwniejsze dla mnie jest to, że program działa prawidłowo, ale tylko z ReadLine. Nie pojawiają się żadne warningi (których się spodziewałem). Natomiast gdy zamienię ReadLine, na naprzykład "Write("test"), to wyświetli się sam "test" (bez treści strony, jak w przypadku ReadLine)
  • Odpowiedz
Dodatkowo jestem pewny ze WriteLine tez ma wersje async - wiec wywolaja ja z await


@abuson: w tym przypadku nie ma to sensu bo funkcja synchroniczna i tak zostanie opakowana w asynchronicznej metodzie GetRequest
  • Odpowiedz
@PtakDlaKarmnikow: tak, ponieważ bez await metoda GetRequest zostanie wywołana, ale main nie będzie czekał na jej wykonanie (bo i tak od razu zwróci future/promise). ReadLine zablokuje maina, dając szansę na wpisanie rezultatu geta. Jakbyś szybko coś wpisał w konsoli, to też by się program skończył bez wpisywania zawartości strony
  • Odpowiedz
@PtakDlaKarmnikow: nie czekasz na wynik GetRequest

Tak jak miales tu napisane - zmień definicję maina na wersje async

public static async Task Main(string[] args)

i dodaj await do GetRequest - wtedy powinieneś dostać taki wynik jak oczekujesz bez ReadLine
  • Odpowiedz
@PtakDlaKarmnikow: Odpal sobie aplikację w zwykłej konsoli to będziesz wiedział dlaczego to tak działą. Niech twoja metoda zwraca Task i będziesz mógł sobie w metodzie Main na niego poczekać aż się wykona przed zamknięciem procesu.
  • Odpowiedz