Start here. This is the direct spoken answer to practice first.
Why this question matters
A worker can finish the business side effect yet fail before message settlement or durable completion. Redelivery is correct broker behavior, so duplicate safety must exist at the side-effect boundary.
For a Service Bus case, I start with one duplicated side effect and inspect MessageId, delivery count, lock-lost or renewal events, settlement outcome, worker instance, and the external provider reference. If delivery count increased after the provider succeeded but before CompleteMessageAsync succeeded, this is redelivery of the same message. I pause unsafe consumption and reconcile the provider before allowing another effect.