Domanda

ho qualcosa di simile a questo:

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
    });
}

Dato che non mi ha colpito la CPU molto, non ho bisogno di un filo. Quello che posso usare al posto di Run per evitare la creazione di un filo?

È stato utile?

Soluzione

credo che tu stia fraintendendo l'intento del pattern Task Asynchrony qui. Quello che stai facendo è probabilmente meglio gestita da ThreadPool.QueueUserWorkItem che riutilizzare un thread di lavoro dal pool del processo, creando un solo se necessario.

Il TAP permette di rompere un compito in "blocchi" di lavoro che possono essere elaborati in modo incrementale, ma non fornisce direttamente un mezzo per dire "questo è un compito di fondo".

Altri suggerimenti

Dipende dal compito che si sta facendo. Dal momento che si dice che non fa uso di un sacco di CPU, darò per scontato il compito richiede molto tempo perché è in attesa di altri eventi. Quindi, è necessario progettare il compito di registrare callback per quegli eventi, in cui ogni completa l'richiamata rapidamente sul thread principale, ma non viene attivato fino a quando si verifica l'evento che stai in attesa di realtà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top