It's probable that you put more thinking into it then I did, I was just reporting my initial ideas about it.
I think the main difference between my POV and yours is that a task is generally unuseful if it returns (or churn) data out of a relatively small window of time (Underlying changes on the data itself, simply network hiccups, etc standing in the way).
From here on, I'll address with "
TIs" other
Tasks
Implementations as Celery, RQ, Resque, DJ and so on.
From my POV, TIs are generally a way to speedup execution times and give the users of your app more "responsiveness" bypassing the normal "serialized" development with out-of-band actor(s).
TIs gave users the best "features" of async programming (responsiveness) avoiding all the hassle required to "switch" your way of doing things to "full-async-mode" (manage actors, events, timeframes, resources, processes, etc).
Without timeouts, the algos would require an async approach that - with all the puns intended - is reaaally different from the standard "we all like it and we're very productive with it" approach of modern web frameworks.
The main issue here is that with no default on timeout a single "never-ending" slashdotted-like task will effectively block execution of all the other tasks in the queue (and I like to think that all tasks within the same group are equally important). Users of some facilities could also end-up with unprevented high $ bills with a single "flawed" task.
Last but not least, I'd like to have users "concerned" about their execution time-frame rather than leaving them without time boundaries.
BTW: in other tasks implementation, a timeout/timelimit/etc parameter is
always intended "in place". You have to explicitely declare the task as
"possibily-never-ending/the-results-are-always-valid-also-if-they-come-back-in-12-hours".