The timer's operating mechanism has changed in ruby api

In Sketchup2024, the timer is no longer waiting for the main thread code to finish executing, and the timer execution is advanced.
I hope that my cache data is always valid during code execution, and the timer mechanism can just realize automatic cleaning.

def self.once_exec(k)
  @timer ||= {}
  unless @timer[k]
    puts "\ncreate #{k} #{Time.now}\n"
    @timer[k] ||= UI.start_timer(0.001, false) {
      UI.stop_timer(@timer[k])
      @timer[k] = nil
      puts "\nfree #{k} #{Time.now}\n"
    }
  end
end

%w[11 22 33 33 22 11].each do |k|
  once_exec(k)
  sleep(1)
end
sleep(2)

sketchup 2022 output

create 11 2025-03-21 09:09:50 +0800

create 22 2025-03-21 09:09:51 +0800

create 33 2025-03-21 09:09:52 +0800
=> 2

free 11 2025-03-21 09:09:58 +0800

free 22 2025-03-21 09:09:58 +0800

free 33 2025-03-21 09:09:58 +0800

sketchup 2024 output

create 11 2025-03-21 09:09:25 +0800

create 22 2025-03-21 09:09:26 +0800

free 11 2025-03-21 09:09:26 +0800

create 33 2025-03-21 09:09:27 +0800

free 22 2025-03-21 09:09:27 +0800

create 22 2025-03-21 09:09:29 +0800

free 33 2025-03-21 09:09:29 +0800

create 11 2025-03-21 09:09:30 +0800

free 22 2025-03-21 09:09:30 +0800
=> 2

free 11 2025-03-21 09:09:33 +0800

The timer’s operating mechanism has changed in ruby api · Issue #1037 · SketchUp/api-issue-tracker.

Kernel#sleep has never worked well in SketchUp’s embedded Ruby process.