Compartilhar via


Estados de trabalho bits

Há quatro classes de estados BITS: inicialização, ação, transferência e final. À medida que um trabalho é executado, ele faz a transição entre estados nas diferentes classes de estado. Quando um trabalho estiver em um estado final, ele não sairá do estado final e não aparecerá em uma enumeração de trabalho .

Métodos de alteração de estado

Há quatro métodos de alteração de estado em um trabalho: Cancelar, Concluir, Retomare Suspender. Desde que um trabalho não esteja em um estado final, você pode chamar qualquer um dos métodos de alteração de estado.

O método Suspend é usado para alternar um trabalho para o estado SUSPENDED. Quando um trabalho é suspenso, todas as suas transferências serão interrompidas e não serão retomadas até que você chame Resume. Um trabalho que já está suspenso simplesmente permanecerá suspenso.

O método Resume é usado para iniciar um trabalho suspenso. Trabalhos em um estado de erro ou erro transitório serão configurados para serem repetidos. Os trabalhos que estão atualmente em um estado de ação permanecerão nesse estado.

O método Cancelar é usado para cancelar um trabalho. O estado mudará para cancelado. Todos os arquivos que estão sendo transferidos no momento não serão concluídos. Todos os arquivos completamente transferidos e parcialmente transferidos serão excluídos.

O método Complete concluirá uma transferência. Todos os arquivos totalmente baixados serão mantidos; os arquivos que não forem totalmente transferidos serão excluídos.

Você deve chamar Cancelar ou Concluir para mover seu trabalho para um estado final e ser limpo. Os trabalhos que não forem transferidos para um estado final desperdiçarão recursos do sistema. O BITS eventualmente cancelará automaticamente trabalhos antigos. O JobInactivityTimeout padrão é cancelar trabalhos após 90 dias.

Estado inicial

O estado inicial é SUSPENDED . A partir daqui, você pode adicionar arquivos ao trabalho e definir propriedades de trabalho e arquivo. Para iniciar uma transferência de trabalho, chame Retomar no trabalho. Se você retomar um trabalho sem arquivos, ele retornará um código de erro BG_E_EMPTY e o trabalho permanecerá suspenso.

Estados de ação

Os estados EM FILA, CONECTANDO e TRANSFERINDO mostram a atividade interna atual do trabalho. Um trabalho que está EM FILA está pronto para ser agendado, possivelmente aguardando o agendador do BITS ou aguardando o usuário fazer logon. Um trabalho que é CONNECTING está tentando se conectar ao servidor para começar a transferir arquivos. Um trabalho que é TRANSFERING está carregando ou baixando seus arquivos ativamente.

O estado DE ERRO TRANSITÓRIO significa que o trabalho tentou e falhou ao transferir o arquivo. Isso pode ser por motivos de política de rede; o trabalho pode ser bloqueado porque a rede atual é muito cara. Ele também pode ser bloqueado por motivos do sistema, como o sistema estar no modo de economia de bateria ou de jogo, ou porque não há conectividade com a Internet.

Os trabalhos no estado de erro transitório serão repetidos automaticamente pelo BITS quando apropriado. O BITS inclui um MinimumRetryDelay e noProgressTimeout valor a ser controlado quando um trabalho é repetido e quando o BITS finalmente deixará de tentar novamente.

Estados transferidos

Os estados transferidos acontecem quando não há mais transferência a ser feita. Você deve cancelar ou concluir um trabalho nesse estado. Você também pode adicionar mais arquivos para transferir e chamar Resume(), mas essa não é uma prática comum.

O ERROR estado acontece quando uma transferência é feita (não será repetida), mas não foi totalmente bem-sucedida. Todos os arquivos devem ser transferidos para serem bem-sucedidos; se algum tiver falhado permanentemente, o trabalho estará em erro. Normalmente, você chamará Cancelar ou Concluir para mover o trabalho para um estado final. A diferença prática é que, quando você chamar Cancelar, qualquer arquivo transferido com êxito será excluído, mas se você chamar Complete, qualquer arquivo transferido com êxito não será excluído.

Os motivos para estar em um estado ERROR incluem

  • Permanecendo muito tempo em um estado DE ERRO TRANSITÓRIO (além da configuração NoProgressTimeout).
  • Obter um erro BG_E_TOKEN_REQUIRED e precisar de assistência com tokens auxiliares

É uma prática comum reconfigurar um trabalho ERROR'd e, em seguida, chamar Resume para tentar novamente o trabalho. Por exemplo, talvez seu aplicativo precise atualizar o nome remoto de um arquivo por meio de SetRemoteName.

A TRANSFERED estado acontece quando uma transferência é feita e foi bem-sucedida. Você deve chamar Concluir para finalizar o trabalho; para trabalhos de download, os arquivos baixados não estarão disponíveis até que você chame Complete. A exceção a essa regra são os trabalhos que são os trabalhos de alto desempenho (e você ainda deve chamar Concluído).

Estados finais

Depois que um trabalho estiver em um estado final, você não poderá chamar nenhum dos métodos de alteração de estado. O trabalho será APÓS você chamar Complete() e todos os arquivos baixados concluídos estarão disponíveis. O trabalho será CANCELADO depois que você chamar Cancel() e todos os arquivos baixados serão excluídos.

Ciclo de vida de um trabalho bits

O ciclo de vida de um trabalho bits começa quando você cria um trabalho. Um trabalho é um contêiner que contém um ou mais arquivos a serem transferidos. Um trabalho também tem propriedades que especificam como o BITS transfere os arquivos e interage com seu aplicativo. Por exemplo, você pode especificar a prioridade do trabalho, se o trabalho é um trabalho de upload ou download e para quais eventos você deseja receber notificação.

Depois de criar o trabalho, adicione um ou mais arquivos (trabalhos de upload podem conter apenas um arquivo) ao trabalho e altere qualquer um dos valores de propriedade conforme apropriado para seu aplicativo. Ao adicionar um arquivo ao trabalho, especifique o nome local (cliente) e remoto (servidor) do arquivo. O nome do arquivo remoto deve usar o protocolo HTTP, HTTPS ou SMB. Os arquivos em um trabalho são processados sequencialmente (primeiro a entrar, primeiro a sair).

O BITS suspende automaticamente os trabalhos quando eles são criados. Você deve retomar o trabalho para ativá-lo na fila de transferência. Você pode suspender ou retomar um trabalho a qualquer momento. Retomar o trabalho move o trabalho do estado suspenso para o estado na fila. O trabalho permanece no estado na fila até que o agendador determine que é a vez do trabalho transferir arquivos. Todos os trabalhos em primeiro plano são executados simultaneamente com um trabalho em segundo plano. O BITS processa os arquivos em trabalhos em primeiro plano serialmente.

Quando é a vez de um trabalho transferir arquivos, o trabalho se move para o estado de conexão enquanto o BITS se conecta ao servidor remoto (especificado no nome do arquivo remoto). Se o BITS for capaz de se conectar ao servidor remoto, o trabalho passará para o estado de transferência onde ele permanece até que sua fatia de tempo termine, a transferência será concluída, ocorrerá um erro ou o aplicativo suspenderá o trabalho.

O trabalho se move entre os estados enfileirados, conectados e transferidos até que o BITS transfira todos os arquivos no trabalho. Nesse ponto, o trabalho passa para o estado transferido. O BITS usa o agendamento round robin para agendar trabalhos que estão no mesmo nível de prioridade. Cada trabalho recebe uma fatia de tempo para processar seus arquivos. Se o trabalho não for concluído durante sua fatia de tempo, o trabalho voltará para o estado enfileirado e o próximo trabalho na fila será ativado. Isso impede que trabalhos grandes bloqueiem trabalhos menores. Os trabalhos são processados em grande parte em uma base FIFO (primeiro a entrar e sair) primeiro a sair; no entanto, o BITS não pode garantir o processamento fifo devido ao agendamento round robin, erros de trabalho e reinicializações de serviço.

Os arquivos transferidos não estão disponíveis para o cliente até que o aplicativo chame o método IBackgroundCopyJob::Complete para transferir a propriedade dos arquivos do BITS para o usuário. Trabalhos de upload também são definidos para o estado transferido quando o arquivo é recebido com êxito pelo servidor. Os trabalhos de resposta de upload são definidos como o estado transferido depois que o arquivo é enviado com êxito para o servidor e a resposta do aplicativo do servidor é transferida com êxito para o cliente.

Se ocorrer um erro, o trabalho passará para o estado de erro fatal ou transitório. Erros fatais são erros dos quais o BITS não pode se recuperar ou que exigem intervenção para corrigir. Se o aplicativo for capaz de corrigir o erro, o aplicativo retomará o trabalho e o BITS moverá o trabalho para o estado na fila. Erros transitórios são erros que podem se resolver sozinhos. O BITS tenta novamente trabalhos no estado de erro transitório até que a transferência seja bem-sucedida ou o trabalho exceda. O trabalho atinge o tempo limite quando nenhum progresso é feito dentro de um período especificado pelo aplicativo. Se o trabalho atingir o tempo limite, o BITS moverá o trabalho para o estado de erro fatal.

Para obter mais informações sobre estados de trabalho, consulte BG_JOB_STATE.