Ich verstehe, dass Daten in ein TPL Datenfluß-Ziel setzen ich verwenden kann Post
oder SendAsync
Correct
, die sofort zurück, wenn das Element in das Ziel genommen werden kann.
Nicht korrekt - wessen Methode beide sofort zurückkehren. Wenn Sie die Post
verwenden, wird auch false
zurückgegeben.
Ich verstehe, dass SendAsync
länger warten wird ein Put es in
teilweise richtig zu versuchen. SendAsync
wird eine Zustandsmaschine einrichten, die schließlich ein Ergebnis zurückgibt.
aber ich bin nicht sicher, was die Bedeutung von SendAsync
false
Rückkehr ist.
Dies bedeutet, dass der Zielblock die Nachricht zu dem Zeitpunkt nicht akzeptieren kann.
Does SendAsync
Rückkehr false
Signal, dass das Ziel (genauer gesagt ein BufferBlock
) beendet ist und wird nie mehr Nachrichten akzeptieren?
Es gibt viele Gründe dafür, nicht nur, dass das Ziel vollständig ist. Zum Beispiel ist der eigene Puffer möglicherweise voll mit Nachrichten, und ein anderer passt nicht hinein (wenn Ihr Block mit BoundedCapacity
eingeschränkt ist). Sie können also nicht mit Sicherheit sagen, dass der Grund dafür, dass die Methode false
zurückgegeben hat, der abgeschlossene Status ist. Wenn Sie jedoch die Kapazität des Puffers nicht einschränken, ist es wahrscheinlich.
Ist es möglich, dass Nachrichten später akzeptiert werden können?
Nein, Blöcke sind so konstruiert, dass sie nur einmal ausgeführt werden können. Sie müssen einen Block neu erstellen und ihn in die Pipeline einstecken, um ihn neu zu starten.
Es ist nicht möglich, den Block neu zu starten und 'SendAsync' wird' false' zurückgeben, wenn der Block keine Nachrichten annehmen kann. Die Antworten lauten: [SendAsync] (https: // stackoverflow.com/questions/13599305/tpl-dataflow-whats-the-funktional-difference-zwischen-post-und-sendasync) und [Neustart eines blocks] (https://stackoverflow.com/questions/15967903/task-dataflow-can -a-data-block-be-changed-from-completion-state) – JSteward