与Smalltalk的Pharo差异

Gak*_*kuo 5 smalltalk future pharo promise

我试图用承诺/未来扩展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
Run Code Online (Sandbox Code Playgroud)

这些是错误:

[forkBackground] Messages sent but not implemented 
[on:do:ensure:] Messages sent but not implemented
Run Code Online (Sandbox Code Playgroud)

我认为Pharo与Smalltalk没有什么不同,或者网站的解决方案是否可能与Smalltalk不兼容?

Lea*_*lia 6

请尝试以下方法:

promiseLock := Semaphore new.
[
  [[promiseValue := aBlock value] on: Error do: [:err | promiseError := err]]
    ensure: [promiseLock signal]] forkAt: Processor userBackgroundPriority
Run Code Online (Sandbox Code Playgroud)

我们的想法是ensure:,即使减少评估,promiseLock信号量也会收到信号量.优先考虑是有争议的,但我会从某个地方开始,并根据需要进行调整.signalErroraBlockforkAt: