我正在设计一个小线程框架,我希望线程框架尽可能地透明到最终代码,这样它几乎不会影响线性代码的语法。我已经想出了大部分的东西,但有些东西给我一个痒:如何定义一个参数,所以函数调用不会解决,直到我成功地将他们的上下文切换到一个新的线程?函数调用作为参数
的想法:
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#的方法,但我不明白。 –