Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Links parallel prüfen mit Asynchronem WebRequest
CarnifeX
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

Links parallel prüfen mit Asynchronem WebRequest

beantworten | zitieren | melden

Hi Leute,

ich komme nicht weiter. Und zwar habe ich eine ganze Reihe Urls die ich gerne testen würde. Da mein Programm dank der vielzahl der urls über 24 STunden dauert wollte ich es per Async Webrequest versuchen. Jedoch bekomme ich es nicht hin. Links wie Erstellen von asynchronen Zugriff bitte nicht als Referenz schicken. Ich habe wirklich alles probiert und kann es nicht in meinem Code umsetzen. Vielleicht kann mich ja jemand unterstützen.



List<string> notWorkingUrls = new List<string>();
           
            StreamWriter fileToWrite = new System.IO.StreamWriter("pfad zur text datei....");
            WebResponse web_Response;

            List<string> domains = new List<string>();
            
            Program p = new Program();
            domains = p.getDomainList();

            //string url = string.Empty;
            //while ((url = fileToRead.ReadLine()) != null)
            foreach(string url in domains)
            {
                web_Response = null;
                
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://" + url);
                WebRequest webRequest = (WebRequest)httpWebRequest;


                try
                {
                    web_Response = webRequest.GetResponse();
                }
                catch (WebException e)
............... usw.....

Danke im vorraus
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Zitat von CarnifeX
Jedoch bekomme ich es nicht hin. [..] Ich habe wirklich alles probiert und kann es nicht in meinem Code umsetzen.

An deinem Codebeispiel kann ich nicht den geringsten asynchronen Ansatz erkennen. Was genau hast du versucht, welche Fehlermeldung kommt, wo genau liegt das Problem?

(Überflüssig zu sagen - wenn du "alles" versucht hättest, würde es schon funktionieren...)

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2357

beantworten | zitieren | melden

Was genau möchtest du? Die einzelnen Links parallel prüfen?

Was heißt, das dauert 24h? Hast du so viele URL's die du prüfst? Grob überschlagen bei einer Sekunde pro Aufruf wären das ja 86 Tausend URL's bist du dir sicher?!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Zitat von inflames2k
Grob überschlagen bei einer Sekunde pro Aufruf wären das ja 5,2 Millionen URL's bist du dir sicher?!

86.400 Sekunden pro Tag, das weiss man doch :D.

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2357

beantworten | zitieren | melden

Zitat von LaTino
Zitat von inflames2k
Grob überschlagen bei einer Sekunde pro Aufruf wären das ja 5,2 Millionen URL's bist du dir sicher?!

86.400 Sekunden pro Tag, das weiss man doch :D.

LaTino

Sorry, keine Ahnung wo ich da gerade gedanklich war. Ändert aber nichts dran, dass ich die Zahl utopisch finde, es sei denn er baut einen Website Crawler und hat genug Zeit so viele URL's in der Textdatei zu erfassen.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
CarnifeX
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Ja links parallel prüfen. Das problem ist dass ich alle Exceptions überprüfen muss - unteranderem auch Timeout-Exception. Und bis diese Auftritt dauert es 60 Sekunden. Da die Anzahl der Timeout-Exceptions enorm hoch ist beansprucht das eineiges an Zeit.
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Zitat von CarnifeX
Da die Anzahl der Timeout-Exceptions enorm hoch ist ...
Ist das überhaupt legal was du da machst?
private Nachricht | Beiträge des Benutzers
CarnifeX
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Ich bin ein bisschen weitergekommen, jedoch funktioniert es immernoch nicht async.

class Program
    {
        static void Main(string[] args)
        {
            Program syncMethod = new Program();
            syncMethod.MainAsync(args).Wait();
        }


            public async Task MainAsync(string[] args)
            {
            string htmlStr;
            List<string> notWorkingUrls = new List<string>();
 
            StreamWriter fileToWrite = new System.IO.StreamWriter("Pfad zur DAtei...");
            WebResponse web_Response;

            List<string> domains = new List<string>();
            
            Program p = new Program();
            domains = p.getDomainList();

            
            foreach(string url in domains)
            {
                web_Response = null;
                
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://" + url);
                WebRequest webRequest = (WebRequest)httpWebRequest;

                try
                {
                    web_Response = await webRequest.GetResponseAsync();
                }

                catch (WebException e)........
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16098

beantworten | zitieren | melden

Bitte mehr Informationen als nur der Brocken "funktioniert nicht"......

Davon abgesehen sollte man jeden Abruf in einen async Task legen (strukturell) und nicht alles auf einmal.
Trennen der Verantwortlichkeiten.

So wie ich das sehe ist der Code auch gar nicht auf Parallelität ausgelegt.
Async != Parallel.

Schau Dir TPL Pipelines an, denn das ist genau dafür / so etwas gemacht.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers