Tengo varias acciones que quiero ejecutar en segundo plano, pero deben ejecutarse de forma síncrona una después de la otra.Creando una cola de ejecución usando Task.ContinueWith?
Me preguntaba si es una buena idea utilizar el método Task.ContinueWith para lograrlo. ¿Prevé algún problema con esto?
Mi código es como la siguiente:
private object syncRoot =new object();
private Task latestTask;
public void EnqueueAction(System.Action action)
{
lock (syncRoot)
{
if (latestTask == null)
latestTask = Task.Factory.StartNew(action);
else
latestTask = latestTask.ContinueWith(tsk => action());
}
}
Una mejora sería utilizar un BlockingCollection alrededor de ConcurrentQueue. Entonces uno puede enviar un hilo Tarea/Trabajador que solo usa un foreach sobre la colección de bloqueo. El foreach se "colgará" hasta que se agregue un nuevo elemento a la cola o se invoque CompleteAdding() en la colección de bloqueo. –