代码之家  ›  专栏  ›  技术社区  ›  Gakuo

Pharo与Smalltalk的区别

  •  7
  • Gakuo  · 技术社区  · 7 年前

    我正试图用承诺/未来来扩展法罗。我偶然发现了这个网站 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一起使用?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Leandro Caniglia Charlie    7 年前

    请尝试以下操作:

    promiseLock := Semaphore new.
    [
      [[promiseValue := aBlock value] on: Error do: [:err | promiseError := err]]
        ensure: [promiseLock signal]] forkAt: Processor userBackgroundPriority
    

    我们的想法是 ensure: 那个 promiseLock 信号量将接收 signal 即使 Error 缩减对的评估 aBlock .优先权 forkAt: 是有争议的,但我会从某个地方开始,并根据需要进行调整。