Condividi tramite


Stati del processo BITS

Esistono quattro classi di stati BITS: avvio, azione, trasferimento e finale. Durante l'esecuzione di un processo, passa tra gli stati nelle diverse classi di stato. Una volta che un processo è in uno stato finale, non verrà spostato dallo stato finale e non verrà visualizzato in un'enumerazione del processo.

Metodi con modifica dello stato

In un processo sono disponibili quattro metodi di modifica dello stato: Cancel, Complete, Resume e Suspend. Finché un processo non è in uno stato finale, è possibile chiamare uno dei metodi che cambiano stato.

Il metodo Suspend viene utilizzato per impostare lo stato SUSPENDED di un processo. Quando un processo viene sospeso, tutti i relativi trasferimenti verranno arrestati e non riprenderanno fino a quando non si chiama Resume. Un processo già sospeso rimarrà semplicemente sospeso.

Il metodo Resume viene usato per avviare un processo sospeso. I processi in uno stato di errore o di errore temporaneo verranno configurati per essere ritentati. I processi attualmente in uno stato di azione rimarranno in tale stato.

Il metodo Cancel viene utilizzato per annullare un processo. Lo stato passerà all'annullamento. Tutti i file attualmente trasferiti non verranno completati. Tutti i file completamente trasferiti e parzialmente trasferiti verranno eliminati.

Il metodo Complete terminerà un trasferimento. Tutti i file scaricati completamente verranno conservati; verranno eliminati i file non completamente trasferiti.

È necessario chiamare Cancel o Complete per spostare il processo in uno stato finale ed essere pulito. I processi che non vengono trasferiti a uno stato finale comportano lo spreco di risorse del sistema. BITS annulla automaticamente i processi precedenti. Il valore predefinito JobInactivityTimeout consiste nell'annullare i processi dopo 90 giorni.

Stato iniziale

Lo stato iniziale è SUSPENDED. Da qui è possibile aggiungere file al processo e impostare le proprietà del processo e del file. Per avviare il trasferimento di un processo, chiamare Riprendi sul processo. Se si riprende un processo senza file, verrà restituito un codice di errore BG_E_EMPTY e il processo rimarrà sospeso.

Stati azione

Gli stati QUEUED, CONNECTING e TRANSFERING mostrano l'attività interna corrente del processo. Un processo in coda è pronto per essere pianificato, possibilmente in attesa dell'utilità di pianificazione BITS o in attesa dell'accesso dell'utente. Un processo che sta tentando di connettersi al server per avviare il trasferimento dei file. Un processo che è TRANSFERING sta caricando o scaricando attivamente i file.

Lo stato DI ERRORE TEMPORANEO indica che il processo ha tentato e non è riuscito a trasferire il file. Questo potrebbe essere per motivi di criteri di rete; il processo potrebbe essere bloccato perché la rete corrente è troppo costosa. Potrebbe anche essere bloccato per motivi di sistema come il sistema in modalità risparmio batteria o gioco o perché non esiste connettività Internet.

I processi nello stato di errore temporaneo verranno ritentati automaticamente da BITS quando appropriato. BITS include un valore MinimumRetryDelay e NoProgressTimeout per controllare quando viene ritentato un processo e quando BITS smetterà di riprovare.

Stati trasferiti

Gli stati trasferiti si verificano quando non è più necessario trasferire. È necessario annullare o completare un processo in questo stato. È anche possibile aggiungere altri file per trasferire e chiamare Resume(), ma questa non è una pratica comune.

Lo stato ERROR si verifica quando viene eseguito un trasferimento (non verrà ritentato), ma non ha avuto esito positivo. Tutti i file devono essere trasferiti per avere esito positivo; se il processo non è riuscito in modo definitivo, si verifica un errore. In genere si chiamerà Annulla o Completa per spostare il processo in uno stato finale. La differenza pratica è che quando si chiama Cancel, qualsiasi file trasferito correttamente verrà eliminato, ma se si chiama Complete, qualsiasi file trasferito correttamente non verrà eliminato.

I motivi per essere in uno stato ERROR includono

  • Rimanere troppo lungo in uno stato DI ERRORE TEMPORANEO (oltre l'impostazione NoProgressTimeout ).
  • Ottenere un errore di BG_E_TOKEN_REQUIRED e richiedere assistenza per i token helper

È pratica comune riconfigurare un processo ERROR e quindi chiamare Resume per riprovare il processo. Ad esempio, l'app potrebbe dover aggiornare il nome remoto di un file tramite SetRemoteName.

Lo stato TRANSFER si verifica quando viene eseguito un trasferimento e ha avuto esito positivo. È necessario chiamare Complete per finalizzare il processo; per i processi di download i file scaricati non saranno disponibili fino a quando non si chiama Completato. L'eccezione a questa regola è costituita dai processi a prestazioni elevate (e è comunque necessario chiamare Complete).

Stati finali

Una volta che un processo è in uno stato finale, non è possibile chiamare uno dei metodi che cambiano stato. Il processo verrà CONFERMATO dopo aver chiamato Complete() e tutti i file scaricati completati saranno disponibili. Il processo verrà ANNULLATO dopo aver chiamato Cancel() e tutti i file scaricati verranno eliminati.

Ciclo di vita di un processo BITS

Il ciclo di vita di un processo BITS inizia quando si crea un processo. Un processo è un contenitore che contiene uno o più file da trasferire. Un processo include anche proprietà che specificano il modo in cui BITS trasferisce i file e interagisce con l'applicazione. Ad esempio, è possibile specificare la priorità del processo, se il processo è un processo di caricamento o download e per gli eventi che si desidera ricevere la notifica.

Dopo aver creato il processo, aggiungere uno o più file (i processi di caricamento possono contenere un solo file) al processo e modificare i valori delle proprietà in base alle esigenze dell'applicazione. Quando si aggiunge un file al processo, specificare sia il nome locale (client) che il nome remoto (server) del file. Il nome del file remoto deve usare il protocollo HTTP, HTTPS o SMB. I file all'interno di un processo vengono elaborati in sequenza (prima in primo piano).

BITS sospende automaticamente i processi quando vengono creati. È necessario riprendere il processo per attivarlo nella coda di trasferimento. È possibile sospendere o riprendere un processo in qualsiasi momento. La ripresa del processo sposta il processo dallo stato sospeso allo stato in coda. Il processo rimane nello stato in coda fino a quando l'utilità di pianificazione non determina che è il turno del processo per trasferire i file. Tutti i processi in primo piano vengono eseguiti simultaneamente con un processo in background. BITS elabora i file all'interno dei processi in primo piano in modo seriale.

Quando è il turno di un processo per trasferire i file, il processo passa allo stato di connessione mentre BITS si connette al server remoto (specificato nel nome file remoto). Se BITS è in grado di connettersi al server remoto, il processo passa allo stato di trasferimento in cui rimane fino al termine dell'intervallo di tempo, il trasferimento viene completato, si verifica un errore o l'applicazione sospende il processo.

Il processo viene spostato tra gli stati in coda, di connessione e di trasferimento fino a quando BITS non trasferisce tutti i file nel processo. A questo punto, il processo passa allo stato trasferito. BITS usa la pianificazione round robin per pianificare i processi con lo stesso livello di priorità. A ogni processo viene assegnato un intervallo di tempo per elaborare i file. Se il processo non viene completato durante la sezione temporale, il processo torna allo stato in coda e il processo successivo nella coda viene attivato. Ciò impedisce ai processi di grandi dimensioni di bloccare processi più piccoli. I posti di lavoro vengono elaborati in gran parte su base FIFO (First Out); BITS, tuttavia, non può garantire l'elaborazione FIFO a causa della pianificazione round robin, degli errori di processo e dei riavvii del servizio.

I file trasferiti non sono disponibili per il client finché l'applicazione non chiama il metodo IBackgroundCopyJob::Complete per trasferire la proprietà dei file da BITS all'utente. I processi di caricamento vengono impostati anche sullo stato trasferito quando il file viene ricevuto correttamente dal server. I processi di caricamento e risposta vengono impostati sullo stato trasferito dopo che il file viene inviato correttamente al server e la risposta dall'applicazione server viene trasferita correttamente al client.

Se si verifica un errore, il processo passa allo stato di errore irreversibile o temporaneo. Gli errori irreversibili sono errori che BITS non è in grado di recuperare o che richiedono l'intervento per correggere. Se l'applicazione è in grado di correggere l'errore, l'applicazione riprende il processo e BITS sposta il processo nello stato in coda. Gli errori temporanei sono errori che possono risolversi autonomamente. BITS ritenta i processi nello stato di errore temporaneo fino a quando il trasferimento non riesce o si verifica il timeout del processo. Si verifica il timeout del processo quando non viene eseguito alcun avanzamento entro un periodo specificato dall'applicazione. Se si verifica il timeout del processo, BITS sposta il processo sullo stato di errore irreversibile.

Per altre informazioni sugli stati del processo, vedere BG_JOB_STATE.