为Pharo扩展Promises/Futures时遇报错:forkBackground方法未实现
解决Pharo中
forkBackground未实现的错误 这个报错很常见——你引用的代码是针对其他Smalltalk方言(比如Squeak)写的,而Pharo的标准库并没有forkBackground这个方法。不过别担心,Pharo提供了更灵活的后台线程创建API,直接替换就能解决问题。
修正后的代码如下:
value: aBlock promiseLock := Semaphore new. [ [ promiseValue := aBlock value ] on: Error do: [ :err | promiseError := err ] ensure: [ promiseLock signal ] ] forkAt: Processor userBackgroundPriority named: 'Promise Evaluation'
关键细节说明:
forkAt:named:是Pharo创建后台线程的标准方式:Processor userBackgroundPriority指定线程使用后台优先级,避免抢占前台UI或高优先级任务,和原代码forkBackground的意图完全匹配;named:参数给线程起了一个可读的名字,后续在调试器或进程列表里能快速识别这个Promise执行线程,方便排查问题。
- 如果不需要线程名称,也可以简化成:
甚至直接用forkAt: Processor userBackgroundPriorityfork,但不推荐——fork默认继承当前线程的优先级,可能达不到后台执行的预期效果。
另外要确认你的类已经声明了promiseValue、promiseError和promiseLock这三个实例变量,不然运行时会报未定义变量的错误哦。
内容的提问来源于stack exchange,提问作者Gakuo
相关产品推荐
相关产品推荐

