This isn't an solution on how to use async features, but one which will also satisfy your needs, i think.
Basically, you can move the fetching part to an external application, and just read the mails with emacs. Therefore, emacs doesn't have to download them, which should conclude in a non-blocking gnus/emacs. After you've set up the email-retriever, you can just change the way gnus gets its emails to a local path.
IMAP
If you want to use IMAP, I'd suggest to use offlineimap. It's a small python script, which downloads your mail to a local folder. The ArchWiki has also a quite comprehensive documentation for configuring offlineimap. An alternative would be isync (which has also an entry in the ArchWiki)
Additionally, this guide provides an example configuration file for both gnus and offlineimap. (I use Mutt, so this is not my gnus config, and can't vouch directly for it.)
POP3
For POP3, I found getmail, but i have no experience with that.
Additinally I'd like to point you to this Gnus Manual entry