Ich habe ursprünglich in Stackoverflow gesucht und google für eine ähnliche Art von Frage. Nur ein Link gab einige Punkte, aber ich kann nicht klar verstehen. [ 1 ]
Die folgenden Fragen verfolgen mich:
Was ist in der asynchronen Programmierung eine echte Callback-Methode? ist delegieren?
Die Implementierung eines asynchronen Programms verwendet mehrere Threads?
Wenn mit Grafiken zur Erläuterung versehen, wäre ich sehr dankbar
[ 1 ] " Unterschied zwischen Multithreading und asynchroner Programmierung "
1) Ein Callback ist im Prinzip ein Delegat, der an eine Prozedur übergeben wurde, die an einem geeigneten Punkt "zurückgerufen" wird. Bei asynchronen Aufrufen wie WebRequest.BeginGetResponse oder einer WCF BeginXxx-Operation würden Sie beispielsweise einen AsyncCallback übergeben. Der Worker "ruft" jede Methode zurück, die Sie als AsyncCallback übergeben, in diesem Fall, wenn er fertig ist, um Sie wissen zu lassen, dass er fertig ist und um das Ergebnis zu erhalten.
2) Multithreading ist ein anderer Teil eines laufenden Programms, typischerweise Threads genannt.
Asynchrone Programmierung verwendet Threads, um einen Code zu starten. Asynchrone Programmierung beruht also auf Multithreading. Siehe unten stehenden Link:
Async-Programmierung und Multi-Threading
Unterschied zwischen Multithreading & amp; Async-Programmierung
Um asynchron / parallel / multi-threaded zu verstehen, müssen wir mit den meisten Grundlagen beginnen und WARUM wir dem Problem so viel Komplexität hinzufügen.
Am Anfang gab es nur wirklich Single-Blocked-Anwendungen. Dies sind wirklich einfache Programme, und mehr als wahrscheinlich, das sind, was Sie gerade schreiben.
Um zu erklären, werde ich eine Analogie eines Pizza House verwenden.
Stellen Sie sich vor, Ihr Computer ist ein Pizzahaus mit einem einzigen Angestellten. Er hat nur eine Grundausbildung gemacht.
Sie gehen in den Laden, sprechen mit dem Angestellten, schauen auf das Menü und bestellen eine Pizza.
Großartig. Der Angestellte geht in den hinteren Teil des Ladens, legt eine Pizza in die und steht neben dem Ofen und wartet auf die Pizza zum Kochen .
Sie erinnern sich, dass Ihre Frau Ananas nicht mag. Sie rufen den Angestellten an, der versucht, seine Aufmerksamkeit auf die Änderung Ihrer Bestellung zu richten. Kein Würfel. Er wird sich nicht aus dem Ofen bewegen (er ist eingeschlafen).
Sie werden genervt und gehen.
Du gehst zur nächsten Pizzeria.
Es hat 4 Angestellte.
Sie gehen in den Laden, sprechen mit dem Angestellten, schauen auf das Menü und bestellen eine Pizza.
Er schreit (sendet eine Nachricht) an die anderen Angestellten auf der Rückseite, um Ihnen eine Pizza zu machen. Sie setzen einen in den Ofen. Er steht neben dem Ofen und schläft.
Sie vergessen, Ihre Frau hat Allergien gegen Speck. Sie sagen Mitarbeiter A, die Pizza abzubrechen. Er ruft dem Koch zu und weckt ihn auf. Der Koch wirft die Pizza in den Mülleimer und legt eine koschere Pizza in den Ofen. Er schläft sofort wieder ein.
Sie warten, Pizza ist fertig, Sie bekommen eine Rechnung. Es ist riesig (zu viele Angestellte, und die Hälfte von ihnen schlafen im Job).
Du gehst zur nächsten Pizzeria.
Es hat 1 Mitarbeiter.
Sie gehen in den Laden, sprechen mit dem Angestellten, schauen auf das Menü und bestellen eine Pizza.
Er geht hinein, legt eine Pizza in den Ofen. Dann hängt er die Quittung ( Rückruf ) an die Pizza an. Er geht zurück zur Theke.
Sie erinnern sich, dass Ihre Frau diesen Monat tatsächlich kein Fleisch isst. Sie sagen dem Angestellten, er geht hinein, behebt die Situation.
Nachdem der Angestellte innen nach einer gemachten Pizza eincheckt. Er liest dann die Quittung (gib Bob diese Pizza).
Sie erhalten günstige erschwingliche und reaktionsschnelle Pizza.
Asynchrone Programmierung ist die Fähigkeit, einen Code parallel zum Hauptprogrammablauf auszuführen. Dies können Web-Service-Aufrufe oder beliebige Aufgaben in der aktuellen Anwendung sein, die ausgeführt wird. Der Callback ist entweder eine benannte oder anonyme Methode, die durch einen Delegaten repräsentiert dargestellt werden kann. Der Rückruf kann mit einem Ergebnis oder einer Ausnahme zurückkehren. Da Ergebnisse von asynchronen Methoden zu jedem Zeitpunkt zurückgegeben werden, wird der aktuell ausgeführte Thread blockiert, wenn die Ergebnisse von asynchronen Methoden abgefragt werden, bis die Methode entweder mit Ausnahme oder Ergebnis zurückkehrt. .Net 3.0 verwendet BackgroundWorker, BeginInvoke / EndInvoke und IAsyncResult (wird noch verwendet) .net 4.0 hat Aufgaben .net 4.5 hat async awa , um dies zu erreichen
async-Aufrufe werden mithilfe von Multithreading implementiert. Basierend auf der Implementierung, zum Beispiel, wenn Tasks verwendet werden, um einige Arbeiten asynchron auszuführen, die Threadpool-Threads verwenden, wird das Framework bestimmen, ob der Code auf dem aktuellen Thread ausgeführt wird, oder es werden neue Threads benötigt.
Der Unterschied zwischen der Multi-Threading- und der Async-Programmierung besteht darin, dass wir im Multithreading einen neuen Thread für eine Funktion erstellen, um nur diese Funktion oder Aufgabe auszuführen oder abzuschließen
async-Programmierung verwendet auch Multithreading, aber auf andere Art und Weise In async ist eine Arbeit oder eine Aufgabe in mehrere Threads aufgeteilt
zum Beispiel, wenn wir 4 Aufgaben haben wenn wir Multithreading verwenden und die Threads wie folgt zuweisen:
%Vor%aber wenn wir das asynchrone Programmiermodell verwenden wir müssen die Threads nicht zuordnen
Task wird automatisch zwischen Threads aufgeteilt kann es sein, single thread oder multiple thread zu verwenden, wie es
benötigtWenn es einen einzelnen Thread verwendet, dann wird Aufgabe 1-4 gleichzeitig funktionieren
in Round Robin Mode
die CPU wechseln zwischen Aufgabe, starten Sie eine Aufgabe, führen Sie es für ein paar Sekunden, und speichern Sie dann seine Position "Kontextwechsel" dann starten andere Aufgabe. das passiert so schnell und scheint wie Illusion, dass alle Aufgaben gleichzeitig laufen.
ähnlich, wenn wir mehrere Threads im asynchronen Modell haben
Eine einzelne Aufgabe wird von mehreren Threads behandelt Wenn Task1 beispielsweise von Thread1 gestartet wird, kann sie in Thread2 oder Thread3 ausgeführt werden, wenn Thread1 nicht an Task1
arbeitetDies ist die Schönheit der asynchronen Programmierung
Ich denke, es ist die beste Erklärung für die Anfänger
Tags und Links c# multithreading asynchronous