I can't tell enough from your code but could this be another case like the one I describe in this post: Structured concurrency deadlock help needed

The other thing I wondered is whether using detach instead of async at any point makes a useful difference in your case. I'm not sure of the context of your overall flow whether it is necessary (and as you can see from my other post I am not sure I have strong grip of when it is and isn't necessary).

It may be that neither of these things apply but I thought I should mention what came to mind.