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