I'm attempting to programmatically chain asynchronous operations in C#4, such as Writes to a given Stream object. I originally did this "manually", hooking callbacks from one operation to the next, but I thought I'd try the .NET 4 Task Parallel Library to save myself the trouble of re-inventing the concurrent wheel.
To start with, I wrap my async calls in Tasks like so:
public static Task CreateWriteTask(Stream stream, byte[] data)
{
return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, data, 0, data.Length, null);
}
Continuations have made chaining synchronous operations very easy (if you'll excuse the unfortunate method name):
public static Task ChainFlush(Stream stream, Task precedingTask)
{
return precedingTask.ContinueWith(x => stream.Flush());
}
But there is no version of the Task.ContinueWith
method that accepts an async operation in the same way as TaskFactory.FromAsync
.
So, assuming that I persist with using the TPL, what I'm looking for the correct implementation of this method:
public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
//?
}