¿Cómo encadeno las operaciones asincrónicas con la biblioteca de tareas paralelas en .NET 4?

Estoy intentando encadenar mediante programación operaciones asincrónicas en C # 4, como Escrituras en un objeto Stream dado. Originalmente hice esto "manualmente", enganchando las devoluciones de llamada de una operación a la siguiente, pero pensé en probar la biblioteca paralela de tareas .NET 4 para evitar el problema de reinventar la rueda concurrente.

Para empezar, envuelvo mis llamadas asíncronas en Tareas de la siguiente manera:

public static Task CreateWriteTask(Stream stream, byte[] data)
{
    return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, data, 0, data.Length, null);
}

Las continuaciones han hecho que encadenar operaciones síncronas sea muy fácil (si disculpa el desafortunado nombre del método)

public static Task ChainFlush(Stream stream, Task precedingTask)
{
    return precedingTask.ContinueWith(x => stream.Flush());
}

Pero no hay una versión delTask.ContinueWith método que acepta una operación asíncrona de la misma manera queTaskFactory.FromAsync.

Entonces, suponiendo que persisto con el uso de TPL, lo que estoy buscando es la implementación correcta de este método:

public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
    //?
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta