You refresh the data in an RTD server by calling Topic.UpdateValue(...)
'Refreshing' the formula by editing the cell won't work, since Excel keeps the same topic, assuming you have not changed the input parameters that you pass to XlCall.RTD(...).
ExcelAsyncUtil.Run internally 'completes' the RTD topic, by making sure that when the UDF gets called after the topic update, the internal call to RTD is skipped. That causes the topic to get disconnected, since the async call is 'done'.
Excel expects an RTD server to provide a stream of many values (real-time data) to Excel, so every time you call Topic.UpdateValue(...) is will update the sheet.
Implementing an async single-call function using RTD is quite a bit of work - that what ExcelAsyncUtil.Run(...) does for you.
-Govert