Unveränderlichkeit und Nebenwirkungen mit DataFlow -TransformblocksC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Unveränderlichkeit und Nebenwirkungen mit DataFlow -Transformblocks

Post by Anonymous »

Ich lese gerade über TPL DataFlow -Pipelines und es gibt etwas Neugieriges, wenn es um Transformblocks geht. Wie ich es verstehe, akzeptiert TransformBlock eine Eingabe vom Typ Tinput, transformiert es und gib das neue Ergebnis als Typ -Toutput, um in einen anderen Block übergeben zu werden. Und der Ausgang ist ein Hinweis auf die Eingabe? Angenommen, das Objekt ist zu groß, wenn es nicht effizient wäre, wenn es nicht effizient wäre. Betrachten Sie dieses Beispiel: < /p>
Angenommen, ich habe eine Zeichenfolge, in der ich nacheinander schwere Konkatinierungen aufnehmen muss. Um den Speicher zu speichern, würde ich StringBuilder verwenden. Hier sind die Blöcke. < /P>
var sbBlock = new TransformBlock(str => new StringBuilder(str));
var op1Block = new TransformBlock(sb =>
{
// call API
// concat to sb
return sb;
});
var op2Block = new TransformBlock(sb =>
{
// call API
// concat to sb
return sb;
});

sbBlock.LinkTo(op1Block, blockOptions);
op1Block.LinkTo(op2Block, blockOptions);
< /code>
Es ist also wirklich nur eine Pipeline von Transformblocks, aber die meisten von ihnen verändern nur SB an Ort und Stelle. Als ich darüber nachdachte, sieht es besorgniserregend aus. Im Kontext von Blöcken haben OP1Block und Op2Block Nebenwirkungen und geben jedoch einen Wert zurück, was sehr gefährlich ist. Im Kontext der gesamten Pipeline kann es keine Probleme geben, da die Staaten nie geteilt werden und sie nacheinander übergeben werden, sodass der nächste Block immer den aktuellsten Wert erhält. Ich könnte mich jedoch irren und möchte Klarstellung. Ich bin mir nicht sicher, ob die Verarbeitung von SB in allen Blöcken immer noch als unveränderlich angesehen werden kann, oder sie kann Probleme in der ganzen Linie einführen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post