film42 / sidekiq-rs

A port of sidekiq to rust using tokio
MIT License
95 stars 10 forks source link

Use a `JoinSet` to manage the processor's tasks instead of a `Vec` #45

Closed spencewenski closed 2 months ago

spencewenski commented 2 months ago

With a Vec, the handles are awaited in the order they are inserted. This means that if a tasks exits with an error, it won't be logged until the tasks ahead of it in the Vec complete, which is typically not until the entire application exits.

Tokio provides an alternative structure to track tasks -- a JoinSet. When iterating over a JoinSet, task results are returned in the order that the tasks are completed instead of the order they're spawned. This could potentially be used to optionally shutdown the entire processor if any of its tasks exit with an error (this would be a new config).

film42 commented 2 months ago

Released as version v0.10.5 🎉 !