Laufen mehrere C# Async Task
Hi normalerweise würde ich dies mit einem Background-Worker, aber ich möchte es mit C# Aufgabe statt, nur um zu verstehen, Aufgabe besser.
Die Sache ist die, dass ich eine Klasse mit den folgenden Eigenschaften
private int _number1;
public int Number1
{
get { return _number1; }
set { _number1 = value; OnPropertyChanged("Number1");}
}
private int _number2;
public int Number2
{
get { return _number2; }
set { _number2 = value; OnPropertyChanged("Number2");}
}
Bitte beachten Sie, dass ich die INotifyPropertyChanged.
Number1 = Task<int>.Factory.StartNew(() => GenerateResult()).Result;
Number2 = Task<int>.Factory.StartNew(() => GenerateResult2()).Result;
Den GenerateResult und GenerateResult2 sind nur dumme Methoden, die schläft und dann wieder eine Zahl.
Wie würde ich diese Arbeit machen Async? Da jetzt GenerateResult2() wird zuerst aufgerufen, wenn GenerateResult() fertig ist.
Ich brauche es, um in der Lage sein, arbeiten Sie Asynchron, da ich keine Ahnung von, wenn jede Aufgabe geht zu beenden, oder sogar, wenn sein gehen, um fertig zu stellen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn man die
Result
Eigenschaft, Sie effektiv zu warten, für die Aufgabe abzuschließen. Es wird ausgeführt, die auf einem hintergrund-thread, aber Sie warten darauf, in Ihrem Haupt-thread für den Abschluss, bevor Sie beginnen, den nächsten thread.Sehen die MSDN-doc für details.
Sollten Sie in der Lage, nur weisen Sie Ihr Eigenschaften aus dem hintergrund-thread:
WPF-databinding wird kümmern sich um marshalling das PropertyChanged-Ereignis an der richtigen dispatcher thread.
Ich habe diesen: Task-Parallelismus (Task Parallel Library) und es besagt, dass bei Verwendung
System.Threading.Tasks.Task<TResult>
die Aufgaben asynchron ausgeführt und kann in beliebiger Reihenfolge. Wenn das Ergebnis zugegriffen wird, bevor die Berechnung abgeschlossen ist, wird die Eigenschaft den thread blockiert, bis der Wert verfügbar ist.Ich denke, das bedeutet, wenn Sie Zugriff auf
.Result
bevor es einen Wert, wie Sie tun in Ihrem Beispiel-code, Sie werden warten müssen, bis es abgeschlossen ist, erste.Macht es Sinn als die
Result
Eigenschaft würde nicht aufgefüllt werden, bis die Aufgabe abgeschlossen ist.