es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

  1. ¿Es este método sensato y hace lo que pretendo?
  2. ¿Ya existe?
Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. Sí, la función es sensible y hace lo que pretendes. Toma una tarea, espera su finalización, aplica una función de mapeo al resultado y devuelve una nueva tarea con el resultado mapeado. Esto es útil cuando deseas transformar la salida de una tarea sin bloquear el hilo que espera su finalización.
    2. Sí, una funcionalidad similar ya existe en la biblioteca .NET como el método ContinueWith. Puedes usarlo para especificar una continuación que se ejecutará después de que se complete la tarea original. Por ejemplo:
      Task<int> t1 = Task.Run(() => 42);
      Task<string> t2 = t1.ContinueWith(t => $"La respuesta es {t.Result}");
      

      Aquí, t2 es una nueva tarea que producirá la cadena “La respuesta es 42” cuando se espere, pero solo después de que t1 se haya completado. El método ContinueWith 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á.

Comments are closed.