我正在开发一个在Grand Central Dispatch(特别是C级API libdispatch)上实现actor模型的库。基本上我的系统的简要概述是这样的:
我正在尝试用语言实现期货,所以我创建了一个包含一些信息的新类型:
但是,我有一个问题,因为dispatch_block_t的类型为void(^)(void),因此它不会返回任何内容。所以我想在我的future_new()函数中设置另一个可用于执行返回结果的块的组,我可以将它存储在我的future_t结构中的“value”成员中,但这样做不会起作用。 / p>
期货实施的其余部分非常明确,除非它取决于能否从行动者那里获得未来的价值,并根据信息采取行动。
当使用该库时,如果我不得不要求用户(和我自己)知道系统其他部分将要使用期货时,它会大大降低其实用性 - 这是不切实际的。
我想知道是否有人可以想办法解决这个问题?
答案 0 :(得分:0)
实际上有Mike Ash's implementation向我指出,一看到他的initWithBlock:在MAFuture上,我意识到我需要做什么。非常类似于那里所做的,所以我将保存关于我如何做的冗长的回应。