我正在設計一個小線程框架,我希望線程框架儘可能地透明到最終代碼,這樣它幾乎不會影響線性代碼的語法。我已經想出了大部分的東西,但有些東西給我一個癢:如何定義一個參數,所以函數調用不會解決,直到我成功地將他們的上下文切換到一個新的線程?函數調用作爲參數
的想法:
var myTask = new Transaction();
myTask < xyz.abc();
myTask < xyz.def();
...some more code...
var result = waitfornext myTask;
從本質上說,myTask會搶ABC()和高清()調用並將其管道到一個線程,則WAITFOR操作員將被阻塞,直到myTask的管道已完成和代碼依賴於abc()和def()可以繼續。以這種方式說出這個.Net的等待/異步模式,但是我想以我自己的方式重新執行它,因此它可以在所有.Net版本中使用,並可能移植到Java/XYZ語言。
問題:調用abc()和def()函數之前,編譯器會將它們的返回值反饋給<運算符,但我真正想要的卻是能夠將這些函數調用提供給運營商,所以我可以推遲他們的執行,直到管道線程準備好這樣做。
基本原理: 與async/await模型不同,您不必修改方法以使其可以異步化,並且無論如何都可以對事務方法使用任何方法。另一個優點是,擦除幾條線,你的代碼會回到線性狀態(不是說異步模型沒有這個優點,但它值得一提)
任何想法?
代表? Lambda表達式?儘管如此,Task Parallel Library並沒有什麼? –
我有我的動機,它已經存在的事實不應該阻止你想要重新創建它。 – Machinarius
當你想要一個更好的車輪時,或者想更好地瞭解車輪的工作方式時,我完全無法重新發明車輪。你有一個非常不尋常/非C#的方法,但我不明白。 –