Just ideally the dev experience should be `result = await somethingThatMayHaveBeenCalledBefore(id=txnref, params)`
You shouldn't need to first do a check to see if the task already exists using a different api, and then choose whether or not to run a new task.
At least this is my preference.. a-la Durable Objects.
If you don't specify a custom unique id when calling the task it would then be treated as a task that can (and would make sense to be) run multiple times (i.e. not idempotent).