Aplicar una función a una tarea.
He escrito el siguiente método de extensión en tareas:
public static async Task<TOut> TaskMap<TIn,TOut>(this Task<TIn> task, Func<TIn,TOut> f)
{
TIn x = await task;
return f(x);
}
Espero que esto solo cree una nueva tarea como la original que simplemente aplica “f” después de que se complete la tarea original.
Es decir, Task y = t.TaskMap(x => x)
debería ser realmente lo mismo que Task y = t
, salvo una rápida construcción de objeto y una llamada de función. No debería cambiar fundamentalmente cuándo se ejecuta la tarea original.
Mis preguntas son:
- ¿Es este método sensato y hace lo que pretendo?
- ¿Ya existe?
davy.ai
ContinueWith
. Puedes usarlo para especificar una continuación que se ejecutará después de que se complete la tarea original. Por ejemplo:Aquí,
t2
es una nueva tarea que producirá la cadena “La respuesta es 42” cuando se espere, pero solo después de quet1
se haya completado. El métodoContinueWith
también proporciona opciones adicionales para controlar cómo se ejecuta la continuación, como especificar el planificador de tareas o el token de cancelación que se utilizará.