Laden...

Funktion von asychron nach synchron umändern

Letzter Beitrag vor einem Jahr 13 Posts 793 Views
Funktion von asychron nach synchron umändern

Ich habe mir im Internet eine cURL-Anweisung nach C# übersetzen lassen. 
https://curl.olsh.me/

curl -H "Authorization: Bearer API_KEY" -H "Content-Type: application/json" -X  POST -i https://api.1fichier.com/v1/file/ls.cgi -d  '{"folder_id":0,"pretty":1}'

Der angezeigte Quellcode ist:

using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.1fichier.com/v1/file/ls.cgi"))
    {
        request.Headers.TryAddWithoutValidation("Authorization", "Bearer" & "API_KEY"); 
        request.Content = new StringContent("{\"folder_id\":0,\"pretty\":1}");
        request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); 
        var response = await httpClient.SendAsync(request);
    }
}

Ich möchte so lange warten bis ich den gesamten Quelltext habe. 
Meine Anwendung soll ein Konsolenprogramm werden.
Deshalb bsteht aus meiner Sicht nicht die Notwendigkeit, die ganze Sache asychron zu programmieren.
Wie kann ich den C#-Quellcode so umändern bzw. neu erstellen, dass dieser ohne await funktioniert?

Deshalb bsteht aus meiner Sicht nicht die Notwendigkeit, die ganze Sache asychron zu programmieren.

Diese Notwendigkeit besteht eigentlich immer. Du merkst als Mensch die Auswirkungen nur weniger, weil Du von Windows keine Warnung bekommst, anders als bei UI-Anwendungen.
IO-Operationen sollten immer asynchron laufen, ansonsten blockiert der Thread, damit der Prozess und damit die gesamte Anwendung.

async/await ändert absolut nichts am Resultat.
Wird mit async/await nicht alles geladen, erfolgt das ohne auch nicht. Es ist nichts anderes als ein Mechanismus, dass Geräteresourcen (CPU..) effizienter genutzt werden.

Das einzige Problem an diesem Snippet ist, dass Du zwar einen Request sendest, aber den Response nicht verarbeitest.
Also nicht mal ein bisschen, absolut gar nicht. Daher wird auch nichts geladen. Es ändert genau gar nichts, wenn Du das synchron machst.

Siehe Basics zum HTTP Client inkl Samples. Da steht alles drin, wie das funktioniert.

PS: Das Forum ist kein Code-Transformator.

PPS: immer ne dumme Idee, irgendeinen Code-Generator zu nutzen und das Resultat nicht zu verstehen...

Ich hatte versucht diesen Code in einen HttpWebRequest umzuwandeln (synchron).
Da ich es nicht hinbekommen habe, dachte ich, frage mal lieber nach.

Beim Umbau in einen HttpWebRequest ist das ganze vermutlich daran gescheitert,
dass ich nicht weiß, wie ich das Zuweisen der Header und POST-Daten dort richtig vornehme (weil andere Properties).

Und wieso probierst dann irgendwas (planlos?) aus statt 2-3 Minuten die Docs zu lesen, das erste Beispiel anzuschauen und es so zu machen, wie es funktioniert?
Verschwendest ja selbst Zeit.

Zitat von Abt

Und wieso probierst dann irgendwas (planlos?) aus statt 2-3 Minuten die Docs zu lesen, das erste Beispiel anzuschauen und es so zu machen, wie es funktioniert?
Verschwendest ja selbst Zeit.

Ich bin hier auf der Arbeit.
Das schreiben im Forum ist noch tolerierbar, weil zwischen den Antworten Zeit vergeht und ich normal weiterarbeite.
Wenn ich allerdings anfange zu debuggen oder irgendwelche Sachen zu lesen, dann bekomme ich Ärger.
Ich brauche die Lösung leider für mein Privat-Projekt.

Das Forum hilft Dir gern bei konkreten Problemen. Wir sind jedoch nicht Dein kostenloser Code-Generator, weil Du keine Zeit dafür hast.

Denke, dass Du dafür Verständnis hast.

Zitat von Abt

Das Forum hilft Dir gern bei konkreten Problemen. Wir sind jedoch nicht Dein kostenloser Code-Generator, weil Du keine Zeit dafür hast.

Denke, dass Du dafür Verständnis hast.

Ich würde auch die asychrone Funktion verwenden, wenn es ich wüsste, wann der Quelltext vollständig geladen ist.

Dass das mit GetResponse fehlt, hatte ich gemerkt.
Mit einem Breakpoint drin, hatte es funktioniert, aber ohne Breakpoint rauscht die Funktion so schnell durch, dass ich als Ergebnis immer nichts bekomme.

Ich werde mir das Problem heute Abend nochmal anschauen und wenn ich noch konkrete Fragen habe, werde ich mich nochmal melden.

Zitat von sv00010kas

Ich würde auch die asychrone Funktion verwenden, wenn es ich wüsste, wann der Quelltext vollständig geladen ist.

Zeigt mir, dass Du Dir nichmal 2 Minuten Zeit genommen und den Link, den ich Dir nicht aus Spaß gegeben habe, angeschaut hast.
HttpClient Class

Denn man muss nicht mal zum ersten Beispiel scrollen, wo es erklärt ist.

Bitte nicht die Hilfsbereitschaft des Forums ausnutzen, weil Du keine Zeit oder Lust hast.
Danke.

Zitat von Abt

Bitte nicht die Hilfsbereitschaft des Forums ausnutzen, weil Du keine Zeit oder Lust hast.

Mit Zeit oder Lust hat dies nichts zu tun.
Ich stelle mich zu blöde an und bin deswegen mit den Nerven am Ende.

Mir ist da noch etwas aufgefallen, was ich vergessen hatte.
Die HttpClient Class zwingt mich meine Frameworkeinstellungen auf mindestens 4.5.1 einzustellen.
Dies bedeutet sollte aus irgendeinem Grund das Programm unbedingt auf Windows XP laufen müssen,
dann wäre dies absolut nicht möglich, weil das Framework 4.0 dort das letzte ist.
Deswegen hatte ich mich vermutlich auch niemals mit der await/asynch beschäftigt.

Wozu willst du noch Windows XP als Zielplatform berücksichtigen?
Windows XP ist seit vielen Jahren ohne support, da würde ich keine 5 Min. für eigenen Software Support verschwenden.

async/await gibt es ebenfalls seit mehreren Jahren.
Wenn man nicht gerade mit uralten und nicht mehr supporteten .NET Versionen arbeitet, kommt man schon durch aktuelle Libs damit in Kontakt.
Entsprechend ist es heute recht schwierig sich um async/await zu drücken.

Abt hat dir alle wichtigen Mittel gegeben.

Wenn dir auf "Arbeit" weder Zeit zum debuggen noch in einfaches lesen der Doku gesteckt werden darf, dann ist dein Arbeitgeben kein Softwareentwickler oder IT Dienstleister.
Falls doch, dann kein ernstzunehmender.
Das gehört zu den grundlegenden Aufgaben einen Software Entwickler.

Wenn es hier um ein privates Projekt geht, dann solltest du dies auch in deiner Freizeit entwickeln.
Auf Arbeit muss man sich nunmal um die Arbeit kümmern, da ist kein Platz für private Projekte.

T-Virs

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Ich habe das Problem jetzt gelöst.
Das Thema kann geschlossen werden.
Ich hatte die Post-Daten falsch übergeben und es nicht mitbekommen.

Wegen dem auf der Arbeit sein, dies ist es wohl falsch rübergekomen.
Ich hatte gemerkt, dass ich genervt davon bin, dass ich es nicht hinbekommen habe.
Was mir allerdings richtig auf den Nerv gegangen ist,
war dass ich dieses Thema eigentlich schon ein paar Tage früher is Forum schreiben wollte.

Ich hatte es allerdings immer wieder vergessen.
Dann habe ich mir gedacht, dass ich es einfach auf der Arbeit ins Forum schreibe,
bevor ich wieder nach Hause komme und es dort wieder vergesse.
Also habe ich es einfach auf der Arbeit ins Forum geschrieben,
weil ich den starken Verdacht hatte, dass wenn ich dies Zuhause machen wollte,
ich es wieder vergessen würde.