Laden...

Links parallel prüfen mit Asynchronem WebRequest

Erstellt von CarnifeX vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.011 Views
C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren
Links parallel prüfen mit Asynchronem WebRequest

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

3.003 Beiträge seit 2006
vor 8 Jahren

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)

2.298 Beiträge seit 2010
vor 8 Jahren

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?!

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

3.003 Beiträge seit 2006
vor 8 Jahren

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 😄.

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)

2.298 Beiträge seit 2010
vor 8 Jahren

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 😄.

LaTino){gray}

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 |

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

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.

W
955 Beiträge seit 2010
vor 8 Jahren

Da die Anzahl der Timeout-Exceptions enorm hoch ist ... Ist das überhaupt legal was du da machst?

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

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)........
16.806 Beiträge seit 2008
vor 8 Jahren

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.