The flow depends on the code. The code in your service calls some asynchronous services.
You should validate your code. Maybe it's a library your code is using.
Sometimes the calls between services are perceived as synchronous but they are executed via messaging services, which are asynchronous by nature. Maybe this is your case.
In my case it are real synchronous calls showing up as async in the transaction flow, I have even seen two identical PP's doing a web request to an unmonitored host ending in the same http 200. One showing up as sync and one as async.... very strange...
Also HTTP calls might be issued as asynchronous for example in Java with CompletableFuture or with various libraries such as Apache Http Client. Isn't this your case? HTTP call is in-fact synchronous, but in such case, the code is non-blocking and the response is processed asynchronously.
You can check the Code-Level tab for the PurePath and it will reveal the stacktrace at the moment the call is triggered. From that, you can see which library and/or code is used.