Wie kann ich asynchrone Vorgänge mit der Task Parallel-Bibliothek in .NET 4 verketten?

Ich versuche, asynchrone Vorgänge in C # 4 programmgesteuert zu verketten, z. B. Schreibt in ein bestimmtes Stream-Objekt. Ursprünglich habe ich dies "manuell" durchgeführt und Rückrufe von einem Vorgang zum nächsten verknüpft, aber ich dachte, ich würde die .NET 4 Task Parallel Library ausprobieren, um mir die Mühe zu ersparen, das parallele Rad neu zu erfinden.

Um zu beginnen, binde ich meine asynchronen Anrufe in Aufgaben wie folgt ein:

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

Fortsetzungen haben die Verkettung von Synchronoperationen sehr einfach gemacht (wenn Sie den unglücklichen Methodennamen entschuldigen):

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

Aber es gibt keine Version desTask.ContinueWith -Methode, die eine asynchrone Operation auf dieselbe Weise akzeptiert wieTaskFactory.FromAsync.

So, unter der Annahme, dass ich weiterhin die TPL verwende, was ich für die korrekte Implementierung dieser Methode suche:

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