Состояния задания BITS
Существует четыре класса состояний BITS: запуск, действие, передача и окончательный. При выполнении задания он переходит между состояниями в разных классах состояний. Когда задание находится в окончательном состоянии, оно не будет выходить из окончательного состояния и не будет отображаться в перечислении заданий.
Методы изменения состояния
В задании есть четыре метода изменения состояния: отмена, завершение, возобновление и приостановка. Если задание не находится в окончательном состоянии, можно вызвать любой из методов изменения состояния.
Метод Suspend используется для переключения задания в состояние SUSPENDED. Когда задание приостановлено, все его передачи будут остановлены и не будут возобновляться, пока не вызовете резюме. Задание, которое уже приостановлено, просто останется приостановленным.
Метод Resume используется для запуска задания, приостановленного. Задания в состоянии ошибки или временной ошибки будут настроены для получения. Задания, которые в настоящее время находятся в состоянии действия, останутся в этом состоянии.
Метод Cancel используется для отмены задания. Состояние переключится на отмененное. Все передаваемые файлы в настоящее время не будут завершены. Все полностью переданные и частично переданные файлы будут удалены.
Метод Complete завершит передачу. Все полностью скачанные файлы будут храниться; Файлы, которые не полностью переданы, будут удалены.
Чтобы переместить задание в окончательное состояние, необходимо вызвать отмену или завершить работу. Задания, которые не переходят в окончательное состояние, будут тратить системные ресурсы. BITS в конечном итоге автоматически отменяет старые задания. Значение по умолчанию JobInactivityTimeout — отмена заданий через 90 дней.
Начальное состояние
Начальное состояние приостановлено. Здесь можно добавить файлы в задание и задать свойства задания и файла. Чтобы начать передачу задания, вызовите резюме задания. Если вы возобновляете задание без файлов, он вернет код ошибки BG_E_EMPTY, и задание останется приостановленным.
Состояния действия
Состояния QUEUED, CONNECTING и TRANSFERRING показывают текущее внутреннее действие задания. Задание, готовое к планированию, возможно, ожидает планировщика BITS или ожидает входа пользователя. Задание, которое подключено к серверу, пытается подключиться к серверу, чтобы начать передачу файлов. Задание, которое ПЕРЕДАЕТСЯ, активно отправляет или загружает файлы.
Состояние TRANSIENT ERROR означает, что задание пыталось и не удалось передать файл. Это может быть вызвано причинами политики сети; Задание может быть заблокировано, так как текущая сеть слишком дорого. Это также может быть заблокировано по системным причинам, таким как система в режиме экономии батареи или в игровом режиме, или из-за отсутствия подключения к Интернету.
Задания в временном состоянии ошибки будут автоматически выполняться BITS при необходимости. BITS включает значение MinimumRetryDelay и NoProgressTimeout для управления выполнением задания и когда BITS, наконец, остановит повторение.
Передаваемые состояния
Переносимые состояния происходят, когда больше не будет выполняться передача. Необходимо отменить или завершить задание в этом состоянии. Вы также можете добавить дополнительные файлы для передачи и вызова Resume(), но это не распространенная практика.
Состояние ERROR происходит при выполнении передачи (она не будет извлечена), но не выполнена полностью. Все файлы должны быть переданы успешно; Если любой из них окончательно завершился сбоем, задание будет в ошибке. Обычно вызовет отмену или завершение задания, чтобы переместить задание в окончательное состояние. Практическая разница заключается в том, что при вызове отмены любой успешно переданный файл будет удален, но при вызове Complete все успешно переданные файлы не будут удалены.
Причины бытия в состоянии ERROR включают
- Оставаться слишком долго в состоянии TRANSIENT ERROR (за пределами параметра NoProgressTimeout ).
- Получение ошибки BG_E_TOKEN_REQUIRED и помощь с вспомогательными маркерами
Это распространенная практика для перенастройки задания ERROR, а затем вызова "Возобновить", чтобы повторить задание. Например, приложению может потребоваться обновить удаленное имя файла с помощью SetRemoteName.
Состояние TRANSFERED происходит при завершении передачи и успешном выполнении. Чтобы завершить задание, необходимо вызвать метод Complete; для заданий загрузки скачанные файлы не будут доступны до тех пор, пока не вызовете команду Complete. Исключением из этого правила является задания, которые являются заданиями высокой производительности (и вы по-прежнему должны вызывать complete).
Окончательные состояния
После того как задание находится в окончательном состоянии, вы не можете вызывать какие-либо методы изменения состояния. Задание будет ПОДТВЕРЖДЕНо после вызова Complete() и будут доступны все загруженные файлы. Задание будет ОТМЕНЕНо после вызова Cancel(), а все скачанные файлы будут удалены.
Жизненный цикл задания BITS
Жизненный цикл задания BITS начинается при создании задания. Задание — это контейнер, содержащий один или несколько файлов для передачи. Задание также имеет свойства, которые указывают, как BITS передает файлы и взаимодействует с приложением. Например, можно указать приоритет задания, является ли задание заданием отправкой или скачиванием и для каких событий вы хотите получать уведомления.
После создания задания добавьте один или несколько файлов (задания отправки могут содержать только один файл) в задание и измените любое из значений свойств в соответствии с вашим приложением. При добавлении файла в задание укажите имя локального (клиента) и удаленного (сервера). Имя удаленного файла должно использовать протокол HTTP, HTTPS или S МБ. Файлы в задании обрабатываются последовательно (сначала в начале).
BITS автоматически приостанавливает задания при создании. Чтобы активировать задание в очереди передачи, необходимо возобновить задание. Вы можете приостановить или возобновить задание в любое время. Возобновление задания перемещает задание из приостановленного состояния в состояние очереди. Задание остается в состоянии очереди, пока планировщик не определит, что это очередь задания для передачи файлов. Все задания переднего плана выполняются одновременно с одним фоновым заданием. BITS обрабатывает файлы в заданиях переднего плана последовательно.
Когда это очередь задания для передачи файлов, задание перемещается в состояние подключения, а BITS подключается к удаленному серверу (указано в имени удаленного файла). Если BITS может подключиться к удаленному серверу, задание перемещается в состояние передачи, в котором он остается до окончания среза времени, передача завершается, возникает ошибка или приложение приостанавливает задание.
Задание перемещается между очередями, подключением и передачей состояний, пока BITS не передает все файлы в задании. На этом этапе задание перемещается в переданное состояние. BITS использует планирование циклического перебора для планирования заданий, которые находятся на одном уровне приоритета. Каждое задание получает срез времени для обработки файлов. Если задание не завершается во время среза времени, задание возвращается в состояние очереди и активируется следующее задание в очереди. Это предотвращает блокировку небольших заданий крупными заданиями. Задания обрабатываются в основном на первом месте (FIFO); однако BITS не может гарантировать обработку FIFO из-за циклического планирования, ошибок заданий и перезапусков служб.
Передаваемые файлы недоступны клиенту, пока приложение не вызовет метод IBackgroundCopyJob::Complete для передачи прав владения файлами из BITS пользователю. Задания отправки также задаются в состоянии передачи, когда файл успешно получен сервером. Задания отправки и ответа задаются в состоянии передачи после успешной отправки файла на сервер, а ответ от серверного приложения успешно передается клиенту.
Если возникает ошибка, задание переходит в неустранимое или временное состояние ошибки. Неустранимые ошибки — это ошибки, из которых BITS не может восстановиться или из которых требуется устранить вмешательство. Если приложение может исправить ошибку, приложение возобновляет задание и BITS перемещает задание в состояние очереди. Временные ошибки — это ошибки, которые могут устранить себя. BitS повторяет задания в временном состоянии ошибки до тех пор, пока передача не будет выполнена успешно или время ожидания задания. Время ожидания задания истекает, когда ход выполнения не выполняется в течение указанного приложения периода. Если время ожидания задания истекает, BITS перемещает задание в состояние неустранимой ошибки.
Дополнительные сведения о состояниях заданий см. в BG_JOB_STATE.