다음을 통해 공유


BITS 작업 상태

BITS 상태의 네 가지 클래스는 시작, 작업, 전송 및 최종입니다. 작업이 실행되면 다른 상태 클래스의 상태 간에 전환됩니다. 작업이 최종 상태가 되면 최종 상태에서 벗어나지 않으며 작업 열거형에 표시되지 않습니다.

상태 변경 메서드

작업에는 취소, 완료, 다시 시작일시 중단의 네 가지 상태 변경 메서드가 있습니다. 작업이 최종 상태가 아닌 한 상태 변경 메서드를 호출할 수 있습니다.

Suspend 메서드는 작업을 SUSPENDED 상태로 전환하는 데 사용됩니다. 작업이 일시 중단되면 모든 전송이 중지되고 Resume을 호출할 때까지 다시 시작되지 않습니다. 이미 일시 중단된 작업은 일시 중단된 상태로 유지됩니다.

Resume 메서드는 일시 중단된 작업을 시작하는 데 사용됩니다. 오류 또는 일시적인 오류 상태의 작업은 다시 시도되도록 설정됩니다. 현재 작업 상태에 있는 작업은 해당 상태로 유지됩니다.

Cancel 메서드는 작업을 취소하는 데 사용됩니다. 상태는 취소됨으로 전환됩니다. 현재 전송 중인 파일은 완료되지 않습니다. 완전히 전송되고 부분적으로 전송된 모든 파일이 삭제됩니다.

Complete 메서드는 전송을 완료합니다. 완전히 다운로드된 파일은 보관됩니다. 완전히 전송되지 않은 파일은 삭제됩니다.

취소 또는 완료를 호출하여 작업을 최종 상태로 이동하고 정리해야 합니다. 최종 상태로 전환되지 않는 작업은 시스템 리소스를 낭비합니다. BITS는 결국 이전 작업을 자동으로 취소합니다. 기본 JobInactivityTimeout 은 90일 후에 작업을 취소하는 것입니다.

시작 상태

시작 상태가 SUSPENDED입니다. 여기에서 작업에 파일을 추가하고 작업 및 파일 속성을 설정할 수 있습니다. 작업 전송을 시작하려면 작업에서 Resume을 호출합니다. 파일이 없는 작업을 다시 시작하면 BG_E_EMPTY 오류 코드가 반환되고 작업이 일시 중단된 상태로 유지됩니다.

작업 상태

QUEUED, CONNECTINGTRANSFERRING 상태는 작업의 현재 내부 활동을 표시합니다. QUEUED인 작업이 예약될 준비가 되었으므로 BITS 스케줄러를 기다리거나 사용자가 로그인할 때까지 대기할 수 있습니다. CONNECTING 작업에서 서버에 연결하여 파일 전송을 시작하려고 합니다. 전송 중인 작업이 파일을 적극적으로 업로드하거나 다운로드하고 있습니다.

TRANSIENT ERROR 상태는 작업이 파일을 전송하려고 시도하고 전송하지 못했음을 의미합니다. 이는 네트워크 정책상의 이유일 수 있습니다. 현재 네트워크가 너무 비싸서 작업이 차단될 수 있습니다. 시스템이 배터리 절약 모드 또는 게임 모드에 있거나 인터넷 연결이 없기 때문에 시스템상의 이유로 차단될 수도 있습니다.

일시적 오류 상태의 작업은 적절한 경우 BITS에서 자동으로 다시 시도됩니다. BITS에는 작업이 다시 시도되는 시기와 BITS가 마지막으로 다시 시도를 중지하는 시기를 제어하는 MinimumRetryDelayNoProgressTimeout 값이 포함되어 있습니다.

전송된 상태

전송된 상태는 더 이상 전송할 작업이 없을 때 발생합니다. 이 상태에서 작업을 취소하거나 완료해야 합니다. Resume()을 전송하고 호출하기 위해 더 많은 파일을 추가할 수도 있지만 일반적인 방법은 아닙니다.

오류 상태는 전송이 완료될 때 발생하지만(다시 시도되지 않음) 완전히 성공하지는 못했습니다. 성공하려면 모든 파일을 전송해야 합니다. 영구적으로 실패한 작업이 있으면 작업이 오류 발생합니다. 일반적으로 취소 또는 완료를 호출하여 작업을 최종 상태로 이동합니다. 실제적인 차이점은 Cancel을 호출하면 성공적으로 전송된 파일이 삭제되지만 Complete를 호출하면 성공적으로 전송된 파일은 삭제되지 않는다는 것입니다.

오류 상태에 있는 이유는 다음과 같습니다.

  • NoProgressTimeout 설정 이외의 일시적인 오류 상태에서 너무 오래 유지합니다.
  • BG_E_TOKEN_REQUIRED 오류 발생 및 도우미 토큰에 대한 지원 필요

ERROR'd 작업을 다시 구성한 다음, Resume을 호출하여 작업을 다시 시도하는 것이 일반적입니다. 예를 들어 앱은 SetRemoteName을 통해 파일의 원격 이름을 업데이트해야 할 수 있습니다.

TRANSFERED 상태는 전송이 완료되고 성공했을 때 발생합니다. 완료를 호출하여 작업을 완료해야 합니다. 다운로드 작업의 경우 다운로드한 파일은 Complete를 호출할 때까지 사용할 수 없습니다. 이 규칙의 예외는 고성능 작업인 작업입니다(여전히 Complete를 호출해야 합니다).

최종 상태

작업이 최종 상태에 있으면 상태 변경 메서드를 호출할 수 없습니다. Complete()를 호출하면 작업이 승인 되고 완료된 모든 다운로드 파일을 사용할 수 있습니다. Cancel()을 호출하면 작업이 취소 되고 다운로드한 모든 파일이 삭제됩니다.

BITS 작업의 수명 주기

BITS 작업의 수명 주기는 작업을 만들 때 시작됩니다. 작업은 전송할 파일이 하나 이상 포함된 컨테이너입니다. 작업에는 BITS가 파일을 전송하고 애플리케이션과 상호 작용하는 방법을 지정하는 속성도 있습니다. 예를 들어 작업의 우선 순위, 작업이 업로드 또는 다운로드 작업인지 여부, 알림을 받을 이벤트를 지정할 수 있습니다.

작업을 만든 후 하나 이상의 파일(업로드 작업에 하나의 파일만 포함할 수 있습니다)을 작업에 추가하고 애플리케이션에 맞게 속성 값을 변경합니다. 작업에 파일을 추가할 때 파일의 로컬(클라이언트) 및 원격(서버) 이름을 모두 지정합니다. 원격 파일 이름은 HTTP, HTTPS 또는 SMB 프로토콜을 사용해야 합니다. 작업 내의 파일은 순차적으로 처리됩니다(첫 번째, 첫 번째 출력).

BITS는 작업을 만들 때 자동으로 일시 중단합니다. 전송 큐에서 활성화하려면 작업을 다시 시작해야 합니다. 언제든지 작업을 일시 중단하거나 다시 시작할 수 있습니다. 작업을 다시 열면 작업이 일시 중단된 상태에서 대기 중인 상태로 이동합니다. 스케줄러가 파일을 전송할 작업의 차례라고 판단할 때까지 작업은 큐에 대기된 상태로 유지됩니다. 모든 포그라운드 작업은 하나의 백그라운드 작업과 동시에 실행됩니다. BITS는 포그라운드 작업 내의 파일을 직렬로 처리합니다.

파일을 전송하는 작업의 차례인 경우 BITS가 원격 서버(원격 파일 이름에 지정됨)에 연결하는 동안 작업이 연결 상태로 이동합니다. BITS가 원격 서버에 연결할 수 있는 경우 작업은 시간 조각이 끝날 때까지 유지되는 전송 상태로 이동하거나, 전송이 완료되거나, 오류가 발생하거나, 애플리케이션이 작업을 일시 중단합니다.

작업은 BITS가 작업의 모든 파일을 전송할 때까지 큐에 대기, 연결 및 전송 상태 간에 이동합니다. 이 시점에서 작업은 전송된 상태로 이동합니다. BITS는 라운드 로빈 예약을 사용하여 동일한 우선 순위 수준에 있는 작업을 예약합니다. 각 작업에는 파일을 처리하는 시간 조각이 제공됩니다. 시간 조각 중에 작업이 완료되지 않으면 작업이 대기 상태로 돌아가고 큐의 다음 작업이 활성화됩니다. 이렇게 하면 대규모 작업이 더 작은 작업을 차단하지 않습니다. 작업은 FIFO(선착순) 기준으로 주로 처리됩니다. 그러나 BITS는 라운드 로빈 예약, 작업 오류 및 서비스 다시 시작으로 인해 FIFO 처리를 보장할 수 없습니다.

애플리케이션이 IBackgroundCopyJob::Complete 메서드를 호출하여 BITS에서 사용자에게 파일 소유권을 전송할 때까지 전송된 파일을 클라이언트에서 사용할 수 없습니다. 업로드 작업은 서버에서 파일을 성공적으로 수신할 때 전송된 상태로 설정됩니다. 업로드-회신 작업은 파일이 서버에 성공적으로 전송되고 서버 애플리케이션의 회신이 클라이언트로 성공적으로 전송된 후 전송된 상태로 설정됩니다.

오류가 발생하면 작업이 치명적이거나 일시적인 오류 상태로 이동합니다. 치명적인 오류는 BITS가 복구할 수 없거나 수정하기 위해 개입이 필요한 오류입니다. 애플리케이션에서 오류를 해결할 수 있는 경우 애플리케이션은 작업을 다시 시작하고 BITS는 작업을 큐에 대기 상태로 이동합니다. 일시적인 오류는 resolve 수 있는 오류입니다. BITS는 전송이 성공하거나 작업이 시간 초과될 때까지 일시적인 오류 상태에서 작업을 다시 시도합니다. 애플리케이션에서 지정한 기간 내에 진행이 수행되지 않는 경우 작업 시간이 초과됩니다. 작업 시간이 초과되면 BITS는 작업을 심각한 오류 상태로 이동합니다.

작업 상태에 대한 자세한 내용은 BG_JOB_STATE 참조하세요.