Estoy intentando encadenar programáticamente operaciones asíncronas en C# 4, como Escrituras en un objeto Stream determinado. Originalmente hice esto "manualmente", conectando devoluciones de llamada de una operación a la siguiente, pero pensé que probaría la .NET 4 Task Parallel Library para ahorrarme el problema de reinventar la rueda concurrente.¿Cómo encadenar operaciones asíncronas con la biblioteca de tarea paralela en .NET 4?
Para empezar, envuelvo mis llamadas asíncronas en las tareas de este modo:
public static Task CreateWriteTask(Stream stream, byte[] data)
{
return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, data, 0, data.Length, null);
}
continuaciones han hecho encadenar operaciones síncronas muy fácil (si me disculpa el nombre del método desafortunado):
public static Task ChainFlush(Stream stream, Task precedingTask)
{
return precedingTask.ContinueWith(x => stream.Flush());
}
Pero no existe una versión del método Task.ContinueWith
que acepte una operación asincrónica de la misma manera que TaskFactory.FromAsync
.
Así, suponiendo que persisto con el uso de la TPL, lo que estoy buscando la correcta aplicación de este método:
public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
//?
}
TaskCreationOptions.AttachedToParent? –