Bagikan melalui


Status pekerjaan BITS

Ada empat kelas status BITS: mulai, tindakan, ditransfer, dan final. Saat pekerjaan berjalan, ia beralih antar status di kelas status yang berbeda. Setelah pekerjaan dalam keadaan akhir, pekerjaan tidak akan bergerak keluar dari status akhir dan tidak akan muncul dalam enumerasi pekerjaan.

Metode perubahan status

Ada empat metode perubahan status pada pekerjaan: Batal, Selesai, Lanjutkan, dan Tangguhkan. Selama pekerjaan tidak dalam status akhir, Anda dapat memanggil salah satu metode yang mengubah status.

Metode Tangguhkan digunakan untuk mengalihkan pekerjaan ke status SUSPENDED. Ketika pekerjaan ditangguhkan, semua transfernya akan dihentikan dan tidak akan dilanjutkan hingga Anda memanggil Lanjutkan. Pekerjaan yang sudah ditangguhkan akan tetap ditangguhkan.

Metode Resume digunakan untuk memulai pekerjaan yang ditangguhkan. Pekerjaan dalam kesalahan atau status kesalahan sementara akan disiapkan untuk dicoba kembali. Pekerjaan yang saat ini dalam status tindakan akan tetap berada dalam status tersebut.

Metode Batal digunakan untuk membatalkan pekerjaan. Status akan beralih ke dibatalkan. Berkas apa pun yang saat ini sedang ditransfer tidak akan diselesaikan. Semua file yang sepenuhnya ditransfer dan sebagian ditransfer akan dihapus.

Metode Lengkap akan menyelesaikan transfer. Semua file yang diunduh sepenuhnya akan disimpan; file yang tidak sepenuhnya ditransfer akan dihapus.

Anda harus memanggil Batal atau Selesai untuk memindahkan pekerjaan Anda ke status akhir dan dibersihkan. Pekerjaan yang tidak ditransisikan ke status akhir akan membuang sumber daya sistem. BITS pada akhirnya akan secara otomatis membatalkan pekerjaan lama. JobInactivityTimeout default adalah membatalkan pekerjaan setelah 90 hari.

Status awal

Status awal ADALAH SUSPENDED. Dari sini, Anda dapat menambahkan file ke pekerjaan dan mengatur properti pekerjaan dan file. Untuk memulai pekerjaan yang ditransfer, hubungi Lanjutkan pada pekerjaan. Jika Anda melanjutkan pekerjaan tanpa file, itu akan mengembalikan kode kesalahan BG_E_EMPTY dan pekerjaan akan tetap ditangguhkan.

Status tindakan

Status QUEUED, CONNECTING, dan TRANSFERRING menunjukkan aktivitas internal pekerjaan Anda saat ini. Pekerjaan yang DIANTREKAN siap untuk dijadwalkan, mungkin menunggu penjadwal BITS atau menunggu pengguna masuk. Pekerjaan yang menghubungkan mencoba menyambungkan ke server untuk mulai mentransfer file. Pekerjaan yang MENTRANSFER secara aktif mengunggah atau mengunduh file Anda.

Status KESALAHAN SEMENTARA berarti bahwa pekerjaan mencoba dan gagal mentransfer file. Ini mungkin karena alasan kebijakan jaringan; pekerjaan mungkin diblokir karena jaringan saat ini terlalu mahal. Ini mungkin juga diblokir karena alasan sistem seperti sistem berada dalam penghemat baterai atau mode permainan, atau karena tidak ada konektivitas internet.

Pekerjaan dalam status kesalahan sementara akan dicoba kembali secara otomatis oleh BITS jika sesuai. BITS mencakup nilai MinimumRetryDelay dan NoProgressTimeout untuk mengontrol kapan pekerjaan dicoba kembali dan kapan BITS akhirnya akan berhenti mencoba kembali.

Status yang ditransfer

Status yang ditransfer terjadi ketika tidak ada lagi transfer yang harus dilakukan. Anda harus membatalkan atau menyelesaikan pekerjaan dalam status ini. Anda juga dapat menambahkan lebih banyak file untuk ditransfer dan memanggil Resume(), tetapi ini bukan praktik umum.

Status KESALAHAN terjadi ketika transfer dilakukan (tidak akan dicoba kembali), tetapi tidak sepenuhnya berhasil. Semua file harus ditransfer agar berhasil; jika ada yang gagal secara permanen, pekerjaan akan mengalami kesalahan. Anda biasanya akan memanggil Batal atau Selesai untuk memindahkan pekerjaan ke status akhir. Perbedaan praktisnya adalah ketika Anda memanggil Batal, file yang berhasil ditransfer akan dihapus, tetapi jika Anda memanggil Selesai, file yang berhasil ditransfer tidak akan dihapus.

Alasan untuk berada dalam status KESALAHAN termasuk

Ini adalah praktik umum untuk mengonfigurasi ulang pekerjaan ERROR dan kemudian memanggil Lanjutkan untuk mencoba kembali pekerjaan. Misalnya, aplikasi Anda mungkin perlu memperbarui nama jarak jauh file melalui SetRemoteName.

Status TRANSFERRED terjadi ketika transfer dilakukan dan berhasil. Anda harus memanggil Selesai untuk menyelesaikan pekerjaan; untuk pekerjaan pengunduhan, file yang diunduh tidak akan tersedia hingga Anda memanggil Selesai. Pengecualian untuk aturan ini adalah pekerjaan yang merupakan pekerjaan berkinerja tinggi (dan Anda masih harus memanggil Selesai).

Status akhir

Setelah pekerjaan dalam status akhir, Anda tidak dapat memanggil metode yang mengubah status apa pun. Pekerjaan akan menjadi ACKNOWLEDGED setelah Anda memanggil Complete() dan semua file yang diunduh selesai akan tersedia. Pekerjaan akan DIBATALKAN setelah Anda memanggil Cancel() dan semua file yang diunduh akan dihapus.

Siklus Hidup pekerjaan BITS

Siklus hidup pekerjaan BITS dimulai ketika Anda membuat pekerjaan. Pekerjaan adalah kontainer yang berisi satu atau beberapa file untuk ditransfer. Pekerjaan juga memiliki properti yang menentukan bagaimana BITS mentransfer file dan berinteraksi dengan aplikasi Anda. Misalnya, Anda dapat menentukan prioritas pekerjaan, apakah pekerjaan tersebut adalah pekerjaan pengunggahan atau pengunduhan, dan peristiwa mana yang ingin Anda terima pemberitahuannya.

Setelah Anda membuat pekerjaan, tambahkan satu atau beberapa file (pekerjaan pengunggahan hanya dapat berisi satu file) ke pekerjaan dan ubah salah satu nilai properti yang sesuai untuk aplikasi Anda. Saat Anda menambahkan file ke pekerjaan, tentukan nama lokal (klien) dan jarak jauh (server) file. Nama file jarak jauh harus menggunakan protokol HTTP, HTTPS, atau SMB. File dalam pekerjaan diproses secara berurutan (pertama masuk, pertama keluar).

BITS secara otomatis menangguhkan pekerjaan ketika dibuat. Anda harus melanjutkan pekerjaan untuk mengaktifkannya dalam antrean transfer. Anda dapat menangguhkan atau melanjutkan pekerjaan kapan saja. Melanjutkan pekerjaan memindahkan pekerjaan dari status ditangguhkan ke status antrean. Pekerjaan tetap dalam status antrean sampai penjadwal menentukan giliran pekerjaan untuk mentransfer file. Semua pekerjaan latar depan berjalan bersamaan dengan satu pekerjaan latar belakang. BITS memproses file dalam pekerjaan latar depan secara serial.

Ketika giliran pekerjaan untuk mentransfer file, pekerjaan berpindah ke status penyambungan sementara BITS tersambung ke server jarak jauh (ditentukan dalam nama file jarak jauh). Jika BITS dapat terhubung ke server jarak jauh, pekerjaan berpindah ke status transfer tempat BITS tetap berada sampai poong waktunya berakhir, transfer selesai, kesalahan terjadi, atau aplikasi menangguhkan pekerjaan.

Pekerjaan berpindah antara status antrean, menyambungkan, dan mentransfer hingga BITS mentransfer semua file dalam pekerjaan. Pada saat itu, pekerjaan berpindah ke status yang ditransfer. BITS menggunakan penjadwalan round-robin untuk menjadwalkan pekerjaan yang berada pada tingkat prioritas yang sama. Setiap pekerjaan diberi sepotong waktu untuk memproses filenya. Jika pekerjaan tidak selesai selama ikatan waktunya, pekerjaan kembali ke status antrean dan pekerjaan berikutnya dalam antrean diaktifkan. Ini mencegah pekerjaan besar memblokir pekerjaan yang lebih kecil. Pekerjaan sebagian besar diproses berdasarkan first in, first out (FIFO) ; namun, BITS tidak dapat menjamin pemrosesan FIFO karena penjadwalan round-robin, kesalahan pekerjaan, dan mulai ulang layanan.

File yang ditransfer tidak tersedia untuk klien sampai aplikasi memanggil metode IBackgroundCopyJob::Complete untuk mentransfer kepemilikan file dari BITS kepada pengguna. Pekerjaan unggahan juga diatur ke status yang ditransfer ketika file berhasil diterima oleh server. Pekerjaan upload-reply diatur ke status yang ditransfer setelah file berhasil dikirim ke server dan balasan dari aplikasi server berhasil ditransfer ke klien.

Jika terjadi kesalahan, pekerjaan berpindah ke status kesalahan fatal atau sementara. Kesalahan fatal adalah kesalahan yang tidak dapat dipulihkan BITS atau yang memerlukan intervensi untuk diperbaiki. Jika aplikasi dapat memperbaiki kesalahan, aplikasi melanjutkan pekerjaan dan BITS memindahkan pekerjaan ke status antrean. Kesalahan sementara adalah kesalahan yang dapat mengatasinya sendiri. BITS mencoba kembali pekerjaan dalam status kesalahan sementara sampai transfer berhasil atau waktu pekerjaan habis. Waktu pekerjaan habis ketika tidak ada kemajuan yang dibuat dalam periode yang ditentukan aplikasi. Jika waktu pekerjaan habis, BITS memindahkan pekerjaan ke status kesalahan fatal.

Untuk informasi selengkapnya tentang status pekerjaan, lihat BG_JOB_STATE.