2016-06-20 14 views
1

Ich habe eine Anwendung zum Entpacken eines Ordners und Zusammenführen von Dateien, ich möchte asynchron hier verwenden, ich möchte einen Thread einen Ordner entpacken und einen anderen Thread zum Zusammenführen der Dateien im entpackten Ordner, einmal entpacken Thread vervollständigen seine Aufgabe, sollte die App warten, bis Fusion Thread abgeschlossen ist. Merger Gewinde (Kind) ist abhängig von unzip Gewinde (parent) unterhalb der Code i bin mit innen Program.csAsynchrone Programmierung in .Net Konsolenanwendung

Datei
var t1= Task.Factory.StartNew(() => 
    {      
     obj.UnZipFiles(files, formats); 
    }); 

innen unzip.cs

var t2= Task.Factory.StartNew(() => 
    { 
     obj.MergeFiles(); 
    }); 

in der Programmdatei. cs-Datei, ich habe

Task.WaitAll(t1); 

Meine Anwendung wartet nicht auf Thread Kind zu vervollständigen, Jede Hilfe würde geschätzt.

+0

Wenn Schritt 2 nur nach Schritt 1 stattfinden kann, gibt es keine Parallelität und keine Asynchronität. Sind Sie sicher, dass Sie das Problem verstanden haben? Klingt wie du beginnst mit einer Lösung für ein nicht existierendes Problem. – usr

+0

Über was "Kind Thread" redest du? Übrigens. Wir haben es mit * 'Task's * zu tun, nicht mit Threads. – stakx

+0

@ usr ein Beispiel betrachten: 2 Zip-Ordner mit jeweils 10 Dateien, ich möchte die App den ersten Zip-Ordner entpacken und 10 Dateien darin zusammenführen, und parallel dazu sollte es den zweiten Zip-Ordner öffnen, während die App zusammengeführt wird die Dateien aus dem ersten Zip-Ordner –

Antwort

2

Wenn Sie die zweite Aufgabe erstellen, verwenden Sie Fortsetzen.

z.

var t1 = new Task(() => obj.UnZipFiles(files, formats)); 
var t2 = t1.ContinueWith((t) => obj.MergeFiles()); 
t1.Start(); 

Dadurch wird sichergestellt, dass die zweite Aufgabe nur ausgelöst wird, wenn die erste Aufgabe abgeschlossen ist.

+0

Danke für Ihren Vorschlag, ich denke, dies würde Aufgaben syncronous machen, korrigieren Sie mich, wenn ich falsch bin –

+0

@Kiran_Ray von meinem Verständnis, dies wird eine "Art" synchrone Verarbeitung sein, weil die zweite Aufgabe auf einem anderen Thread ausgeführt wird wenn die erste Aufgabe beendet ist. Wenn Sie "TaskContinuationOptions.ExecuteSynchronously" übergeben, wird die zweite Task in demselben Thread ausgeführt wie zuvor, wodurch sie wirklich synchron ist. – Alex

+0

@Kiran_Ray Auf der anderen Seite, wenn Sie auf das Ergebnis der ersten Aufgabe warten müssen, weil Sie nichts anderes tun können, bevor die erste Aufgabe abgeschlossen ist ... Dann macht es vielleicht keinen Sinn, Aufgaben zu verwenden? – Alex