The documentation appears to point out that they'll be utilized similarly. What's the difference so when should each be utilized? That ought to be utilized for max performance (as both suggest that they're the "quickest").

Documentation for context.map_query: https://docs.google.com/document/d/1rPyB2RmRERAZDPpqy2cxzXeDGyfLhX-s-3dFVpnwFXw/edit?hl=en_US#heading=h.wniiq5a4ja4o

Documentation for qry_obj.map_async: https://docs.google.com/document/d/1rPyB2RmRERAZDPpqy2cxzXeDGyfLhX-s-3dFVpnwFXw/edit?hl=en_US#heading=h.t1t6424hbp7y

Certainly use qry_obj.map_async(). Context().map_query() is really a lower-level API that you simply should not need. Note, that document is much outdated I've got a TODO to update it but other activities keep getting priority. Fortunately the Google Application Engine documentation team is assisting with documentation now.

Searching in the implementation it seems Query.map_async is simply a shortcut to call Context.map_query:

def map_async(self, callback, merge_future=None, **q_options):
   """Map a callback function or tasklet over the query results.

   This is the asynchronous version of Query.map().
   """
   return tasklets.get_context().map_query(self, callback,
                                           options=_make_options(q_options),
                                           merge_future=merge_future)