Ich versuche, asynchrone Operationen in C#4 programmatisch zu verketten, wie z. B. Writes zu einem bestimmten Stream-Objekt. Ursprünglich tat ich dies "manuell", Hooking Rückrufe von einer Operation zur nächsten, aber ich dachte, ich würde versuchen, die .NET 4 Task Parallel Library, um mir die Mühe zu ersparen, neu zu erfinden, die gleichzeitige Rad.
Für den Anfang verpacke ich meine asynchronen Aufrufe in Tasks wie folgt:
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 synchroner Operationen sehr einfach gemacht (wenn Sie den unglücklichen Methodennamen entschuldigen):
public static Task ChainFlush(Stream stream, Task precedingTask)
{
return precedingTask.ContinueWith(x => stream.Flush());
}
Es gibt jedoch keine Version des Task.ContinueWith
Methode, die eine asynchrone Operation auf dieselbe Weise akzeptiert wie TaskFactory.FromAsync
.
Also, vorausgesetzt, dass ich mit der Verwendung der TPL beharren, was ich für die korrekte Implementierung dieser Methode suchen:
public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
//?
}