Pharo 与 Smalltalk 的区别

Pharo differences with Smalltalk

我正在尝试使用 promises/futures 扩展 Pharo。我发现了这个网站 http://onsmalltalk.com/smalltalk-concurrency-playing-with-futures。它在 Smalltalk 中实现期货。但是,当我将这部分代码复制到 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

想法是 ensure: promiseLock 信号量将收到 signal,即使 Error 减少了 aBlock 的计算。 forkAt: 的优先级值得商榷,但我会从某个地方开始,并根据需要进行调整。