Doing it like this will actually create cross-threading issues in the EntityManager, because TaskEx.Run executes the action on a different thread, so it's gonna try to use the EntityManager from a thread other than the one that created it.
The cleanest and most robust way is to create async methods for each one and then execute them in parallel.
For example.
private async Task LoadRatesAsync()
{
Rates = new BindableCollection<RATE_MASTER>(await _adminUnitOfWork.Rates.AllAsync());
}
private async Task LoadCargoTypesAsync()
{
CargoTypes = new BindableCollection<string>(await _adminUnitOfWork.CargoTypes.FindAsync(q => q.Select(x => x.CARGO_TYPE), x => true, fetchOptions: options => options.Distinct());
}
and then you can do:
await TaskFns.WhenAll(LoadRatesAsync(), LoadCargoTypesAsync());
Also, notice the proper way of doing those distinct projection queries. The way you have it performs much poorer because it loads all the entities in the cache and then does the projection and distinct in memory. If you only need the distinct list of something, do it in the database for better performance.