我正在尝试用 Promise/Future 来扩展 Pharo。我偶然发现了这个网站http://onsmalltalk.com/smalltalk-concurrency-playing-with-futures 。它在 Smalltalk 中实现了 future。然而,当我将这部分代码复制到 Pharo 上时,出现了一些错误:
value: aBlock
promiseLock := Semaphore new.
[ [ promiseValue := aBlock value ]
on: Error
do: [ :err | promiseError := err ]
ensure: [ promiseLock signal ] ] forkBackground
以下是错误:
[forkBackground] Messages sent but not implemented
[on:do:ensure:] Messages sent but not implemented
我认为 Pharo 与 Smalltalk 没有什么不同,或者该网站的解决方案是否也不适用于 Smalltalk?
最佳答案
尝试以下操作:
promiseLock := Semaphore new.
[
[[promiseValue := aBlock value] on: Error do: [:err | promiseError := err]]
ensure: [promiseLock signal]] forkAt: Processor userBackgroundPriority
这个想法是确保:
即使错误
减少,promiseLock
信号量也会收到信号
aBlock
的评估。 forkAt:
的优先级是有争议的,但我会从某个地方开始,并根据需要进行调整。
关于promise - Pharo 与 Smalltalk 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49910368/