Pregunta

Tengo algo como esto:

private void DoSomething()
{
    System.Console.WriteLine("Creating Foo");
    Foo result = new Foo();

    DoSomethingAsync();

    System.Console.WriteLine("Returning Foo");
    return result;
}


private async void DoSomethingAsync()
{
    // The following task takes a long time, but is not CPU intensive
    await TaskEx.Run(() =>
    {
         // code lives here... removed for this example
    });
}

Como no llego mucho a la CPU, no necesito un hilo. ¿Qué puedo usar en lugar de correr para evitar la creación de un hilo?

¿Fue útil?

Solución

Creo que estás malinterpretando la intención del patrón de asincronía de tareas aquí. Lo que estás haciendo probablemente sea mejor manejado por ThreadPool.QueueUserWorkItem que reutilizará un hilo de trabajador del grupo del proceso, solo creando uno si es necesario.

El TAP le permite dividir una tarea en "trozos" de trabajo que se pueden procesar de forma incremental, pero no proporciona directamente un medio para decir "Esta es una tarea de fondo".

Otros consejos

Depende de la tarea que esté haciendo. Como dices que no usa mucha CPU, asumiré que la tarea lleva mucho tiempo porque está esperando otros eventos. Por lo tanto, deberá diseñar su tarea para registrar devoluciones de llamada para esos eventos, donde cada devolución de llamada se completa rápidamente en el hilo principal, pero no se activa hasta que ocurra el evento que está esperando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top