Migliori pratiche per l'utilizzo del pool di thread

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

Cose da fare

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

  • Usare gli 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. Nelle app WinUI 3 usare DispatcherQueue.TryEnqueue da Microsoft.UI.Dispatching.DispatcherQueue.

  • Usare ThreadPoolTimer.CreateTimer anziché la funzione Sleep .

  • Usare il pool di thread anziché creare il 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 all'interno 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 gli 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 di periodo di <1 millisecondo (incluso 0). Ciò farà sì che l'elemento di lavoro si comporti come un timer a singolo scatto.

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

  • 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 i 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 all'interno del gestore può essere eseguito dopo che l'elemento di lavoro è stato impostato sullo stato completo.

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