The normal behavior of the Run Asynchronous function is:
1. When executing by first time, it triggers the delegate asynchronously, meanwhile the returning object will be #NA!
2. Once the Asynchronous call executes the delegate (the result is stored in cache so as to get it when the Run Asynchronous Function is called again), it triggers a CallBack to the original Function in order to get the result.
3. The Original Function Fires again, to get the result, so that executes back the Run Asynchronous Function, but this time it does not executes the delegate, it just get the results from the cache.
In your case you will get a Matrix from your function, to handle it without doing the less, you will need to use Formula array (selecting the group of cells accordingly to the result matrix and then pressing Shift+Control+Enter), this will render the results on the cells.
Note: Unfortunately, the Run from ExcelAsyncUtil does not work well with Formula Array, you will need to create a new Function that behaves the same.