Ich werde versuchen, meine Frage anhand des sinnlosen Beispiels zu illustrieren, das Sie unten sehen.Ist async-await eine notwendige Bedingung, um zwei unabhängige Aufgaben in meinem Programm parallel auszuführen?
using System;
using System.IO;
namespace PointlessProgram
{
class PointlessClass
{
public static void WriteFooToTextFile ()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Hillary\Documents\PointlessFolder\Foo.txt"))
{
file.Write("Foo");
}
}
public static void WriteBarToTextFile ()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Hillary\Documents\PointlessFolder\Bar.txt"))
{
file.Write("Bar");
}
}
static void Main()
{
WriteFooToTextFile(); // (A)
WriteBarToTextFile(); // (B)
}
}
}
Hier (B)
braucht nicht nach (A)
ausgeführt werden, weil es nicht auf jedem Ausgang von (A)
erzeugt abhängt, und neighter tut (A)
auf (B)
ab. Nehmen wir an, mein Computer hat 2 Prozessoren und wird all seine Verarbeitungsleistung dem Ausführen dieses Programms widmen. Wird der Compiler herausfinden, dass (A)
und (B)
parallel ausgeführt werden können, oder wird es nacheinander ausgeführt, es sei denn, ich schreibe explizit meinen Code, um die Maschine darauf hinzuweisen, dass (A)
nicht beendet wird, bevor (B)
ausgeführt wird? Und wenn ja ist, async
-await
, wie ich diese Ausführung ändern von
===
A
---
B
===
zu
========
A | B
========
???
Was ich verwirrend finden über async
-await
ist, dass Sie nicht denken, in Bezug auf das Programm in unabhängige Aufgaben Partitionierung A
, B
, C
, ...; Sie denken stattdessen an "diese Aufgabe" und "alles andere" und alles, was Sie tun, sagt "alles andere kann weiter laufen, während diese Aufgabe ausgeführt wird".
Bitte helfen Sie mir zu verstehen.
Ich bin nicht sicher, was Sie nicht schon fragen können durch die Suche und das Lesen über async, Multithreading, TPL (Task Parallel Library) usw. –
@KoryGill beantwortet werden Ich stimme zu..aber jemand, der für den Präsidenten kandidiert, hat nicht die Zeit dafür;). – i3arnon