Cómo llamar a un método asíncrono en el constructor de una clase

Descripción: 

Cuando trabajamos con métodos asíncronos en .NET, nos encontramos con la problemática de que la llamada a un método de dicho tipo se debe hacer con la palabra reservada await, que únicamente se puede utilizar si el método que contiene la llamada es a su vez asíncrono:

public async object MiMetodo() {
   var Resultado = await miClase.LeeBuffer();
   return Resultado
}

En el ejemplo, MiMetodo debe ser obligatoriamente de tipo async, para poder utilizar un await. La cosa se complica si queremos hacer una llamada asíncrona desde el constructor de una clase, puesto que el método constructor no puede ser asíncrono. En este caso, deberemos utilizar un método auxiliar, que llamaremos inicializador asíncrono.

Resolución: 

Para hacer llamadas a métodos asíncronos en el constructor, utilizaremos la siguiente estructura:

public class unaClase
{
   Task Inicializacion { get; set; }

   public unaClase()
   {
      Inicializacion = InicializadorAsync();
   }

   private async Task InicializadorAsync()
   {
      Resultado = await MetodoAsincrono();
   }

}

Aquí nos encontramos con la clase unaClase. Pretendemos que en el constructor se llame al método asíncrono MetodoAsincrono. Como tenemos que ejecutar la llamada mediante await, pero el constructor no puede ser async, lo que hacemos es crear un método asíncrono InicializadorAsync, que será el encargado de realizar la llamada a MetodoAsincrono. En la clase, creamos una propiedad de tipo Task llamada Inicializacion, que se encargará de referenciar la llamada a InicializadorAsync. Para realizar esa llamada, únicamente tendremos que asignar dicha referencia en el constructor.

Tecnología: 
public async object MiMetodo() {    var Resultado = await miClase.LeeBuffer();    return Resultado }

En el ejemplo, MiMetodo debe ser obligatoriamente de tipo async, para poder utilizar un await." data-share-imageurl="" style="position:fixed;bottom:0px;left:0px;">