我想基于Naughy Dogs fiber based task system实现我自己的任务系统。
我想大致像这样做
auto fiber = new Fiber((){
someFunction();
});
然后我想把光纤交给我创建的一个线程。这应该不是问题。
但有时候我希望得到一个结果,也许someFunction
的类型为int function()
。
auto t = task!someFunction();
auto fiber = new Fiber((){
task.yieldForce;
});
submitFiberToSomeThreadPool(fiber);
但似乎我不能像这样使用Task
。我似乎必须将它提交到Taskpool中,或者我必须调用executeInNewThread
这是我不想要的。
这是否意味着我必须实施我自己未来的承诺系统?
答案 0 :(得分:2)
Fiber
是一个非常基本的原语。在vibe.d中实现了更高级别的任务系统 - 具体来说,您的问题似乎适合http://vibed.org/api/vibe.core.concurrency/async
import vibe.core.core;
import vibe.core.concurrency;
void main ( )
{
// "root" task, necessary as one can't suspend main
// thread as it isn't wrapped by fiber
runTask({
auto future = async({
sleep(500.msecs);
return 42;
});
sleep(250.msecs);
int value = future.getResult();
exitEventLoop();
});
runEventLoop();
}