Tom,
Yes, ideally viewpoint should be set after the map is added to the MapView. That may require a small amount of refactoring to break this code into two parts, one to create the map, another to call `mapView.SetViewpoint` or `mapView.SetViewpointAsync`. Alternatively, you might be able to follow the pattern in `AddGraphicsOverlays` to interact with the MapView.
Since the GetMap is already an async Task, you should be able to insert `await _map.LoadAsync` before returning the map. That will ensure the map is loaded before it is added to the map. If you explicitly load the map by calling `_map.LoadAsync` before returning, you can then check `_map.LoadStatus` rather than setting up an event. Although if you are already making the change to calling SetViewpoint on the MapView, then you should only need the explicit loading step if you want to do error handling.
Updated code might look something like the following:
try
{
var basemap = await _currentMapStyle.ToEsri();
_map = new Map(basemap);
await _map.LoadAsync();
_mapView.Map = _map; // Or alternatively do this in a separate method
AddGraphicsOverlays();
await _mapView.SetViewpointAsync(initialLatitude, initialLongitude, _defaultZoom);
}
catch //... error handling - explicit loading of map should throw exceptions that you can catch