Ich frage mich, wie ich eine Faser an einen Thread übergeben?Wie übergibt man eine Faser an einen Thread?
Die einzige Möglichkeit, die ich geschafft habe, war es, zu und von shared
zu werfen.
auto fiber = new Fiber((){
});
auto t = spawn((){
auto fib = cast(Fiber)receiveOnly!(shared(Fiber));
writeln("fib");
fib.call();
});
send(t, cast(shared(Fiber))fiber);
Aber das scheint nicht richtig. Ich denke, ich verstehe die Implikationen von shared
nicht vollständig.
Ich musste die Faser zu teilen teilen, weil ich es nicht ohne es an den Thread senden konnte. Ich musste es zu einer Faser zurückwerfen, weil ich Fiber.call
auf einer geteilten Faser nicht benennen konnte.
Was ist die korrekte Art, ein Fiber
an ein Gewinde zu übergeben?
Ist die Dokumentation falsch? "Bitte beachten Sie, dass keine Faser an einen bestimmten Thread gebunden werden muss. Stattdessen können Fasern frei zwischen Threads übergeben werden, solange sie nicht gerade ausgeführt werden." –
Es ist nicht falsch (gerade jetzt), weil Sie immer Shared (Fiber) mit allen Auswirkungen verwenden können, aber es bricht D-System, so ist es möglich, dass es in Zukunft nicht mehr erlaubt wird. – Kozzi11
Die Dokumentation wurde so geschrieben, weil Walter sie ursprünglich unterstützen wollte. Einige große kommerzielle D-Nutzer (Sociomantic und weka.io) sind dagegen sehr dagegen und es gibt einen starken Druck, die Spezifikationen zu ändern, um sie für immer zu verbieten. –