MVVM c # ¿cómo cargar datos asíncronos en una propiedad?

Me pregunto si hay un mejor enfoque para cargar datos asíncronos en una propiedad. ahora creo una función asíncrona y levanto una Tarea en la parte Obtener de la propiedad como esta:

private ObservableCollection<CProyecto> prope;

public ObservableCollection<CProyecto> Prope
{
    get 
    {
        if (prope == null)
        {
            Task.Run(()=> LoadData()).Wait();
        }

        return proyectos;
    }
    set 
    { 
        prope = value; 
        RaisePropertyChanged(); 
    }
}

async private Task LoadData() 
{
    Prope = await clsStaticClassDataLoader.GetDataFromWebService();
}

Este enfoque funciona, pero no me gusta el uso de .Wait, porque eso puede congelar la pantalla si el servicio no responde rápidamente.

¿Puedes por favor guiarme en este asunto?

gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta