> Which layer does async code belong?
Short answer: into presenter or into an extra service-layer but not in the gui, data or domain layer.
Long answer:
I would put it into a service-layer that sits between presenter- and domain-layer resulting in these layers
gui - presenter - service - domain - data
In the domainlayer (or the servicelayer) you have a synchronios version of the logic that needs to consume the data of the external service. Lets call it mySyncMethod.
In the servicelayer you create a thin async wrapper around mySyncMethod.
Reason: It is very difficuilt to unittest async methods. sync methods are much easier to test.
If there is only one reference to the async functionality you can put into the presenter.