Práticas recomendadas para usar o grupo de threads

Este tópico descreve as melhores práticas para trabalhar com o pool de threads.

Coisas a Fazer

  • Usa o pool de threads para fazer trabalho paralelo na tua aplicação.

  • Usa itens de trabalho para realizar tarefas estendidas sem bloquear a thread da interface.

  • Crie itens de trabalho de curta duração e independentes. Os itens de trabalho correm de forma assíncrona e podem ser submetidos ao pool em qualquer ordem a partir da fila.

  • Despachar atualizações para o tópico da interface. Nas aplicações do WinUI 3, use DispatcherQueue.TryEnqueue a partir de Microsoft.UI.Dispatching.DispatcherQueue.

  • Utilize ThreadPoolTimer.CreateTimer em vez da função Sleep.

  • Usa o pool de threads em vez de criares o teu próprio sistema de gestão de threads. O conjunto de threads funciona ao nível do sistema operativo, com funcionalidades avançadas, e foi otimizado para se dimensionar dinamicamente em função dos recursos e da atividade do dispositivo, no processo e em todo o sistema.

  • Em C++, certifique-se de que os delegados de itens de trabalho utilizam o modelo de threads ágil (os delegados de C++ são ágeis por predefinição).

  • Use itens de trabalho pré-alocados quando não conseguir tolerar uma falha na alocação de recursos no momento da utilização.

Coisas a não fazer

  • Não crie temporizadores periódicos com um valor de período de <1 milissegundo (incluindo 0). Isto fará com que o item de trabalho se comporte como um temporizador de disparo único.

  • Não envie trabalhos periódicos que demoram mais tempo a concluir do que o tempo especificado no parâmetro do período .

  • Não tente enviar atualizações da interface (para além de toasts e notificações) a partir de um item de trabalho despachado a partir de uma tarefa em segundo plano. Em vez disso, use gestores de progresso e conclusão de tarefas em segundo plano – por exemplo, IBackgroundTaskInstance.Progress.

  • Quando utilizares processadores de itens de trabalho que usam a palavra-chave async, não partas do princípio de que todo o código no processador já foi executado quando o estado do item de trabalho tiver sido definido como concluído. O item de trabalho do pool de threads pode ser definido para o estado completo antes de todo o código do handler ter sido executado. O código que segue uma palavra-chave await dentro do handler pode ser executado depois de o item de trabalho ter sido definido para o estado completo.

  • Não tente executar um item pré-alocado mais do que uma vez sem o reinicializar. Crie um item de trabalho periódico