Compartilhar via


Práticas recomendadas para usar o pool de threads

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

Fazer

  • Use o pool de threads para fazer trabalho paralelo em seu aplicativo.

  • Use itens de trabalho para realizar tarefas estendidas sem bloquear o thread da interface do usuário.

  • Crie itens de trabalho de curta duração e independentes. Os itens de trabalho são executados de forma assíncrona e podem ser enviados ao pool em qualquer ordem da fila.

  • Despache atualizações para o thread da interface do usuário com o Windows.UI.Core.CoreDispatcher.

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

  • Use o pool de threads em vez de criar seu próprio sistema de gerenciamento de threads. O pool de threads é executado no nível do sistema operacional com recursos avançados e é otimizado para dimensionar dinamicamente de acordo com os recursos e a atividade do dispositivo no processo e em todo o sistema.

  • Em C++, verifique se os delegados de item de trabalho usam o modelo de threading ágil (os delegados C++ são ágeis por padrão).

  • Use itens de trabalho pré-alocados quando você não puder tolerar uma falha de alocação de recursos no momento do uso.

O que não fazer

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

  • Não envie itens de trabalho periódicos que levem mais tempo para serem concluídos do que o tempo especificado no parâmetro period .

  • Não tente enviar atualizações da interface do usuário (exceto notificações do sistema e notificações) de um item de trabalho expedido de uma tarefa em segundo plano. Em vez disso, use manipuladores de progresso e conclusão de tarefas em segundo plano, por exemplo, IBackgroundTaskInstance.Progress.

  • Ao usar manipuladores de item de trabalho que usam a palavra-chave async , lembre-se de que o item de trabalho do pool de threads pode ser definido como o estado completo antes que todo o código no manipulador seja executado. O código após uma palavra-chave await dentro do manipulador pode ser executado depois que o item de trabalho tiver sido definido como o estado completo.

  • Não tente executar um item de trabalho pré-alocado mais de uma vez sem reinicializá-lo. Criar um item de trabalho periódico