TPL-Datenfluss blockiert Post vs SendAsync Bitcoin 24000

Twitter E-Mail linkedin github Stapelüberlauf RSS hamid mosalla Web-Entwicklung und .Net Artikel, Tutorials, Diskussionen 18. September 2018 von Hamid Mosalla | .Net, asynchrone und parallele Programmierung, C # in asynchroner, asynchroner und paralleler Programmierung, Pufferblock, aufgabenbasiertes asynchrones Muster, TPL Datenfluss TPL Datenfluss Blöcke: Post vs sendasync

Ich habe vor kurzem eine exzellente Artikelserie über den TPL-Datenfluss von Jack van Lightly gelesen. Er macht mich auf den Unterschied zwischen post und sendasync aufmerksam, wenn wir etwas zu einem Block posten wollen. Ich habe damals nicht viel darüber nachgedacht. Aber als ich meine Lesungen durchging, sah ich, was ich vermisste und sah, wie wichtig es ist, diese Unterscheidung wirklich zu verstehen. Also dachte ich mir, dass es nicht schlecht ist, wenn ich es zu einem Post mache und es mit meinen Lesern teile.


Der Unterschied zwischen Post und sendasync

Einige Blöcke im TPL-Datenfluss können eingehende und ausgehende Nachrichten puffern. Sie tun das, weil, wenn eine Nachricht in einen Block kommt, der Block möglicherweise beschäftigt ist. Also legte der Block die Elemente in die Nachrichtenwarteschlange, die wir Puffer nennen. Aber manchmal ist dieser eingehende Puffer bereits vollständig gefüllt. Es ist nur ein Grund von vielen, die passieren können, aber wir werden sehen, wie sich post und sendasync in dieser Situation verhalten. Cara menambang bitcoin di android es ist wichtig zu beachten, dass Blöcke die Entscheidung über den Umgang mit der aktuellen Nachricht verschieben können. Hier liegt der Hauptunterschied zwischen diesen beiden Lügen. Post

Wenn wir post verwenden, kehrt das Steuerelement sofort zurück, wenn der Block seine Entscheidung über die Nachricht verschieben möchte. Mit anderen Worten, wenn zum Beispiel die eingehende Nachrichtenwarteschlange voll ist, wird der Beitrag false zurückgeben. Das bedeutet im Grunde die Post lehnt den Strom ab und wir müssen uns dessen bewusst sein und einen Mechanismus einbauen, um den Gegenstand usw. erneut zu senden. Lassen Sie die Dinge mit einem Komponententest klarer werden.

Die sendasync-Methode unterscheidet sich insofern, als wenn ein Block entscheidet, die Annahme einer Nachricht zu verschieben, dies nicht tut falsch zurückgeben sofort. Aber es liefert eine bool-Aufgabe, die die Entscheidung des Blocks in der Zukunft darstellt. Mit anderen Worten, wir werden auf den Block warten, um eine Entscheidung darüber zu treffen, ob er unsere Nachricht annehmen will oder nicht. Lassen Sie uns dies mit diesen beiden Komponententests klären.

In unserem ersten Test, wenn wir das zweite Objekt mit sendasync in unseren Block senden, sehen wir, dass es nicht vollständig ist, wenn wir den Status unserer Aufgabe überprüfen. Also wird sendasync eine Aufgabe für uns zurückgeben, in der der Puffer voll war, und darauf warten, dass der Block unser Objekt im Gegensatz zur Post-Methode akzeptiert falsch zurückgeben sofort in diesen Situationen. Warum ist der Unterschied wichtig?

Wir haben also gesehen, wie unterschiedlich diese beiden Methoden sind, wenn wir den Datenfluss verwenden Blöcke. Aber wann sollten wir diese beiden Methoden verwenden und was bedeutet das? Die Implikation ist, dass wenn wir Post verwenden und wir nicht vorsichtig sind, könnten wir einige wichtige Daten verlieren, die wir uns nicht leisten können zu verlieren. Beachten Sie, dass dies auch aus anderen Gründen mit sendasync passieren kann. Wir sollten also einen Mechanismus für beide haben. Bitcoin Futures-Handelszeiten Was können wir dagegen tun?

IMO sollten wir sendasync die meiste Zeit verwenden, es sei denn, wir sind in Ordnung mit dem Verlust eines Artikels im Prozess. Zum Beispiel, wenn wir eine Eingabe in irgendeiner Art von Statistik-App verloren haben und wir eine große Toleranz hatten, ist es vielleicht in Ordnung, die Post-Methode zu verwenden. Es ist ebenfalls erwähnenswert, dass selbst wenn wir uns dazu entschließen, sendasync zu verwenden, unser Block den Artikel möglicherweise immer noch ablehnen wird. Aber das passiert nicht, weil es in unserem Puffer limitiert ist, aber es ist eher ein Spezialfall.

Es gibt viele Lösungen für dieses Problem, aber das Einfachste, was wir für Post und sendasync tun können, ist, ein Objekt aus der Warteschlange zu entfernen, es an Post zu senden, wenn es nicht akzeptiert wird, stellen wir das Element erneut ein. Eine andere Lösung kann eine Bedingung in einer while-Schleife sein, die sicherstellt, dass wir den Gegenstand immer wieder in den Block schicken, bis die Arbeit an dem Gegenstand beendet ist und wir dann zum nächsten Gegenstand gehen. Zusammenfassung