ich geschrieben habe, ein Verfahren unter Verwendung von Asynchron-Schlüsselwort zu verstehen, aber das Ergebnis kann es nicht verstehen, und der Grund ist es nicht wirklich funktioniert:Der Versuch, async/erwarten in C#
static async void ExampleWithValueReturned_Async(Stopwatch sw, SlowOperation opr1, SlowOperation opr2)
{
Console.WriteLine("Started processing ASYNC. Start: {0}", sw.Elapsed);
sw.Start();
Console.WriteLine("2 Step0: {0}", sw.Elapsed);
var sum1_2 = await Task<double>.Factory.StartNew(() => opr1.PerformSlowOperation(1, true));
Console.WriteLine("2 Step1: {0}", sw.Elapsed);
var sum2_2 = await Task<double>.Factory.StartNew(() => opr2.PerformSlowOperation(1, true));
Console.WriteLine("2 Step2: {0}", sw.Elapsed);
Console.WriteLine("Operation 1 gave sum: {0}", sum1_2.ToString("0.##"));
Console.WriteLine("Operation 2 gave sum: {0}", sum2_2.ToString("0.##"));
Console.WriteLine("Stopped processing ASYNC. Stop: {0}", sw.Elapsed);
sw.Stop();
sw.Reset();
Console.WriteLine("");
}
Ich hatte erwartet, dies zu Sie laufen doppelt so schnell wie die Inline-Verarbeitung, da PerformSlowOperation parallel läuft. Meine Erwartung war, dass die Produktion von sum1_2 und sum2_2 zur gleichen Zeit stattfindet, während die Analyse des Ergebnisses basierend auf den Stoppuhr-Logs zeigt, dass beide Werte genauso verarbeitet werden wie im Fall der Inline-Verarbeitung. Die Gesamtzeit ist in beiden Fällen gleich. Wieso ist es so?
Nebenbei bemerkt, 'Task.Factory.StartNew' ist eine gefährliche API. Verwenden Sie stattdessen "Task.Run". –
Versuchen Sie asynchrone Void-Konstruktionen zu vermeiden. Suchen Sie nach weiteren Informationen auf dieser Seite (https://msdn.microsoft.com/en-us/magazine/jj991977.aspx). –
@JeroenHeier Prost für dein Feedback. Werfen Sie einen Blick – Bartosz