GameplayAbilities and you

AbilityTasks, are more or less standard async K2Nodes. This is the file which define them:
K2Node_LatentAbilityCall.cpp
You can have specialized K2Nodes for any tasks if you wish (limiting them to specific graphs, generating outputs, having graphs inside K2Node, pretty much anything goes).

Though creating custom K2Nodes is bit obscure, since that part of engine have zero documentation, all you can do is to looks for how it is done and reverse engineer it.