There are two parts to an async query: the actual query execution where the request is sent to the server and the results are received, and the merge of these results into cache. The first part is always performed on a background thread, the second part, the merge into cache, is always performed synchronously on the main thread. The merge must be performed synchronously because the EntityManager itself is not thread safe, and you may have other queries, saves or edits underway. The merge might be slow if a large number of entities of the queried type are already loaded into cache. As the merge is performed a number of events can be fired too, so if you have handlers in place, such as PropertyChanged, EntityChanged, EntityGroupChanged, that could affect performance.
Generally, if you re-execute exactly the same query when using the "Normal" query strategy the EntityManager will run a CacheOnly query. Even when called via ExecuteAsync the CacheOnly query will complete synchronously, and since the actual cache contents haven't changed no merge is performed and this should be fast. If you're doing a CacheOnly query and seeing the UI freeze then the problem may be in how you're re-loading the collection or performing the data binding.