Condividi tramite


Procedure consigliate per l'uso del pool di thread

In questo argomento vengono descritte le procedure consigliate per l'uso del pool di thread.

Operazioni consentite

  • Usare il pool di thread per eseguire operazioni parallele nell'app.

  • Usare elementi di lavoro per eseguire attività estese senza bloccare il thread dell'interfaccia utente.

  • Creare elementi di lavoro di breve durata e indipendenti. Gli elementi di lavoro vengono eseguiti in modo asincrono e possono essere inviati al pool in qualsiasi ordine dalla coda.

  • Inviare gli aggiornamenti al thread dell'interfaccia utente con Windows.UI.Core.CoreDispatcher.

  • Usare ThreadPoolTimer.CreateTimer anziché la funzione Sleep.

  • Usare il pool di thread anziché creare un proprio sistema di gestione dei thread. Il pool di thread viene eseguito a livello di sistema operativo con funzionalità avanzate ed è ottimizzato per la scalabilità dinamica in base alle risorse e all'attività del dispositivo all'interno del processo e del sistema.

  • In C++ assicurarsi che i delegati degli elementi di lavoro usino il modello di threading agile (i delegati C++ sono agili per impostazione predefinita).

  • Usare elementi di lavoro preallocati quando non è possibile tollerare un errore di allocazione delle risorse al momento dell'uso.

Operazioni non consentite

  • Non creare timer periodici con un valore period di <1 millisecondo (incluso 0). In questo modo, l'elemento di lavoro si comporterà con un timer singolo.

  • Non inviare elementi di lavoro periodici che richiedono più tempo rispetto alla quantità di tempo specificata nel parametro period.

  • Non provare a inviare aggiornamenti dell'interfaccia utente (ad eccezione di avvisi popup e notifiche) da un elemento di lavoro inviato da un'attività in background. Usare invece gestori di avanzamento e completamento delle attività in background, ad esempio IBackgroundTaskInstance.Progress.

  • Quando si usano gestori di elementi di lavoro che usano la parola chiave asincrona , non si presuppone che tutto il codice nel gestore sia stato eseguito quando lo stato completo è stato impostato sull'elemento di lavoro. L'elemento di lavoro del pool di thread può essere impostato sullo stato completo prima dell'esecuzione di tutto il codice nel gestore. Il codice che segue una parola chiave await nel gestore potrebbe essere eseguito dopo che l'elemento di lavoro è stato impostato sullo stato completato.

  • Non provare a eseguire più volte un elemento di lavoro preallocato senza reinizializzarlo. Creare un elemento di lavoro periodico