私は小さなスレッド フレームワークを設計していますが、そのスレッド フレームワークを最終的なコードに対してできるだけ透明にして、線形コードの構文にほとんど影響を与えないようにしたいと考えています。私はほとんどの部分を考えましたが、何かが私にかゆみを与えています: コンテキストを新しいスレッドに正常に切り替えるまで、関数呼び出しが解決されないようにパラメーターを定義する方法は?
アイデア:
var myTask = new Transaction();
myTask < xyz.abc();
myTask < xyz.def();
...some more code...
var result = waitfornext myTask;
本質的に、myTask は abc() および def() 呼び出しを取得してスレッドにパイプラインし、次に myTask のパイプラインが終了して abc() および def() に依存するコードが続行できるようになるまで、waitfor 演算子がブロックされます。いわばこれは .Net の await/async モデルですが、すべての .Net バージョンで使用でき、Java/XYZ 言語に移植できるように、独自の方法でやり直したいと考えています。
問題: abc() および def() 呼び出しは、戻り値を < 演算子に供給する前にコンパイラによって評価されますが、私が本当に望んでいるのは、これらの関数呼び出しを演算子に供給できるようにすることです。パイプライン スレッドの準備が整うまで、それらの実行を延期します。
理論的根拠: async/await モデルとは異なり、非同期化できるようにメソッドを変更する必要はなく、とにかくトランザクション化されたメソッドで任意のメソッドを使用できます。もう1つの利点は、数行を消去すると、コードが線形に戻ることです(非同期モデルにこの利点がないわけではありませんが、とにかく言及する価値があります)
何か案は?