Idle Handlers

My idle handler works but sometimes it seems it doesn’t wait for other handlers to finish before it gets called again which causes odd behavior when running other routines (some don’t finish at all, others are jerky, etc.). I know I can change the time of the return via a property but is there any way to suspend an idle of an application altogether and then resume it again when a routine is finished? Something like:

on do_something()
    set idle of me to false
    --do something
    set idle of me to true

Also, changing the idle return time is frustrating since even if you change it back to a short return time and force it to idle via an “idle me” command, it still waits for the long return to finish before resuming the idle at the shorter return:

property idle_time : 1
property idle_min : 1
property idle_max : 10

on do_something()
    set idle_time to idle_max
    idle me --will idle for 10 seconds
    --do something
    delay 5
    set idle_time to idle_min
    idle me  --should resume idle to 1 second but it actually runs with a 1 second return then waits 5 more seconds for the idle call above to finish to resume constant 1 second intervals

on idle the_object
    log ("idling for " & idle_time)
    --do some routine while idle
    return idle_time

Any ideas are appreciated.