2017-03-08 5 views
1

Ich habe das folgende Szenario, einen Timer alle x Minuten:Herunterladen während der Verarbeitung

  1. herunterladen ein Element aus einer Ruhe Dienst arbeiten (in PHP geschrieben)
  2. einen Prozess Batch-Lauf Punkt zu erarbeiten

Jetzt ist die Anwendung voll funktionsfähig, aber ich möchte den gesamten Prozess beschleunigen einen anderen Artikel herunterladen (wenn im Rest-Service vorhanden), während die Anwendung einen verarbeitet.

Ich denke, dass ich einen Puffer/eine Warteschlange, um dies zu erreichen, wie BlockingCollection, aber ich habe keine Ahnung, wie man es verwendet.

Was ist der richtige Weg, um das zu erreichen, was ich versuche?

Vielen Dank im Voraus!

Antwort

1

Sie können eine Funktion erstellen, die nach neuen Dateien zum Herunterladen sucht. Lassen Sie diese Funktion als eigenen Hintergrundthread starten, der in einer Endlosschleife ausgeführt wird und in jeder Iteration nach neuen Downloads sucht. Wenn Dateien gefunden werden, die heruntergeladen werden müssen, rufen Sie eine separate Funktion auf, um die Datei als neuen Thread herunterzuladen. Diese neue Download-Funktion kann dann die Verarbeitungsfunktion als einen weiteren Thread aufrufen, sobald die Datei fertig heruntergeladen ist. Mit diesem Ansatz werden Sie bei Bedarf alle Aufgaben parallel für mehrere Dateien ausführen.

Funktionen können

Thread thread = new Thread(FunctionName); 
thread.start(); 
0

Verwenden Microsofts Reactive Framework (NuGet "System.Reactive"), indem Sie diese als neue Themen gestartet werden. Dann können Sie dies tun:

var x_minutes = 5; 

var query = 
    from t in Observable.Interval(TimeSpan.FromMinutes(x_minutes)) 
    from i in Observable.Start(() => DownloadAnItem()) 
    from e in Observable.Start(() => ElaborateItem(i)) 
    select new { i, e }; 

var subscription = 
    query.Subscribe(x => 
    { 
     // Do something with each `x.i` & `x.e` 
    }); 

Multi-Threaded und einfach.

Wenn Sie die Verarbeitung stoppen möchten, rufen Sie einfach subscription.Dispose() an.

Verwandte Themen