promise - Pharo 与 Smalltalk 的差异

标签 promise future smalltalk pharo

我正在尝试用 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/

相关文章:

javascript - Promise.all 那么结构无法按预期工作

scala - 在 akka actor 中使用 future 回调

list - flutter : How put received data on model as nested List

java - 什么是 Java 静态的 Smalltalk 等价物?

smalltalk - Monticello 扩展方法分类规则

javascript - 简单的语句应该被 Bluebird Promise 中的 Promise.try 包围吗?

javascript - promises 和 closures 是否消耗了我所有的内存?

rust - 等待结果映射 future

oop - Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?

node.js - 使用node.js将数据设置到firebase数据库后出现 'then'回调错误