¿Cuál es la firma del método para pasar un delegado asíncrono?

Recientemente volví a C # desde estar en tierra Objective-C, y las palabras clave async / aguarda en C # 5 se ven geniales. Pero todavía estoy tratando de manejar la sintaxis adecuada.

Quiero declarar un método que tome un delegado asíncrono como parámetro, pero tengo problemas para obtener la sintaxis correcta de la persona que llama y de la persona que llama. ¿Alguien puede proporcionar un ejemplo de código que muestre la declaración del método, la llamada y una llamada al delegado?

Estoy pensando que la declaración sería algo como lo siguiente. Tenga en cuenta que esta función no es asíncrona; es decir, su asincronía es independiente del delegado.

void DoSomethingWithCallback(async delegate foo(int)) 
{
    ...
    foo(42);
    ...
}

La llamada sería algo como:

DoSomethingWithCallback(async (int x) => { this.SomeProperty = await SomeAsync(x); });

Por supuesto, nada de esto se compila y la mayoría de las muestras que he visto suponen que uno tiene un campo o propiedad que es el delegado, en lugar del delegado anónimo que me gustaría usar.

Respuestas a la pregunta(4)

Su respuesta a la pregunta