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)
{
//?
}