BITS İş durumları
BITS durumlarınındört sınıfı vardır: başlatma, eylem, aktarılmış ve son. bir iş çalıştırıldığında, farklı durum sınıflarındaki durumlar arasında geçiş sağlar. bir iş son duruma ulaştığında, son durumdan taşınmaz ve iş numaralandırmasındagösterilmez.
Durum değiştirme yöntemleri
Bir işte durum değiştiren dört yöntem vardır: İptal Et , Tamamla , Sürdür veAskıya Al. bir iş son durumda olmadığı sürece durum değiştiren yöntemlerden herhangi birini çağırabilirsiniz.
Askıya Alma yöntemi, işi ASKıYA ALDI durumuna geçmek için kullanılır. bir iş askıya alındığında, tüm aktarımları durdurulur ve siz Özgeçmiş'i çağırana kadar devam etmez. Zaten askıya alınmış bir iş askıya alınmış olarak kalır.
Askıya alınmış bir işi başlatmak için Resume yöntemi kullanılır. Bir hata veya geçici hata durumundaki işler yeniden denenecek şekilde ayarlanır. Şu anda eylem durumunda olan işler bu durumda kalır.
bir işi iptal etmek için İptal yöntemi kullanılır. Durum iptal edildi durumuna geçer. Şu anda aktarılmakta olan dosyalar tamamlanmaz. Tamamen aktarılan ve kısmen aktarılan tüm dosyalar silinir.
Complete yöntemi aktarımı tamamlar. Tam olarak indirilen tüm dosyalar korunur; tam olarak aktarılmayan dosyalar silinir.
İşinizi son duruma getirmek ve temizlenmek için İptal'i veya Tamamla'yı aramanız gerekir. Son duruma geçirilmeyen işler sistem kaynaklarını boşa harcar. BITS, eski işleri otomatik olarak iptal eder. JobInactivityTimeout varsayılan 90 gün sonra işleri iptal etmektir.
Başlangıç durumu
Başlangıç durumu SUSPENDED'dır. Buradan işe dosya ekleyebilir ve iş ile dosya özelliklerini ayarlayabilirsiniz. bir iş aktarımı başlatmak için iş üzerinde Özgeçmiş'i arayın. Dosya içermeyen bir işi sürdürürseniz, BG_E_EMPTY hata kodu döndürülür ve iş askıya alınır.
Eylem durumları
QUEUEDCONNECTING ve TRANSFERRING durumları işinizin geçerli iç etkinliğini gösterir. KUYRUĞA ALıNMıŞ bir iş zamanlamaya hazır, büyük olasılıkla BITS zamanlayıcısını bekliyor veya kullanıcının oturum açmasını bekliyor. BAĞLANIYOR olan bir iş, dosyaları aktarmaya başlamak için sunucuya bağlanmaya çalışır. AKTARAN bir iş, dosyalarınızı etkin bir şekilde karşıya yüklüyor veya indiriyor.
GEÇICI HATA durumu, işin dosyayı aktarmayı denediğini ve aktaramadığı anlamına gelir. Bu, ağ ilkesi nedenleriyle olabilir; geçerli ağ çok pahalı olduğundan iş engellenebilir. Ayrıca, sistemin pil tasarrufu veya oyun modunda olması veya İnternet bağlantısı olmaması gibi sistem nedenleriyle de engellenebilir.
Geçici hata durumundaki işler, uygun olduğunda BITS tarafından otomatik olarak yeniden denenecektir. BITS, bir işin ne zaman yeniden deneneceğini ve BITS'nin yeniden denemeyi ne zaman durduracağını denetlemek için bir MinimumRetryDelay ve NoProgressTimeout değeri içerir.
Aktarılan durumlar
Aktarılan durumlar, başka aktarım yapılmadığında gerçekleşir. Bu durumdaki bir işi iptal etmeniz veya tamamlamanız gerekir. Ayrıca, resume() öğesini aktarmak ve çağırmak için daha fazla dosya ekleyebilirsiniz, ancak bu yaygın bir uygulama değildir.
ERROR durumu, aktarım yapıldığında (yeniden denenmeyecek), ancak tam olarak başarılı olmadığında gerçekleşir. Başarılı olmak için tüm dosyaların aktarılması gerekir; herhangi biri kalıcı olarak başarısız olduysa, iş hatayla sonuçlanır. İşi son duruma taşımak için genellikle İptal'i veya Tamamla'yı çağırırsınız. Pratik fark, İptal'i çağırdığınızda, başarıyla aktarılan herhangi bir dosyanın silineceği, ancak Complete çağrısı yaparsanız, başarıyla aktarılan hiçbir dosyanın silinmeyecek olmasıdır.
ERROR durumunda olmanın nedenleri şunlardır:
- GEÇİCİ HATA durumunda çok uzun kalma (NoProgressTimeout ayarının dışında).
- BG_E_TOKEN_REQUIRED hatası alma ve yardımcı belirteçleri ile ilgili yardım gerekiyor
Bir ERROR'd işini yeniden yapılandırmak ve ardından işi yeniden denemek için Özgeçmiş'i çağırmak yaygın bir uygulamadır. Örneğin, uygulamanızın SetRemoteNamearacılığıyla dosyanın uzak adını güncelleştirmesi gerekebilir.
AKTARILDI durumu, aktarım yapıldığında ve başarılı olduğunda gerçekleşir. İşi sonlandırmak için Complete'i çağırmanız gerekir; indirme işleri için, siz Complete çağrısı yapılana kadar indirilen dosyalar kullanılamaz. Bu kuralın istisnası, yüksek performanslı işler olan işlerdir (ve yine de Complete çağrısı yapmalısınız).
Son durumlar
bir iş son duruma ulaştığında, durum değiştiren yöntemlerin hiçbirini çağıramazsınız. Complete() çağrısından sonra iş ACKNOWLEDGED olur ve tamamlanan tüm indirilen dosyalar kullanılabilir olur. cancel() çağrısından sonra iş İPTAL EDİlDİ ve indirilen tüm dosyalar silinir.
BITS işinin Yaşam Döngüsü
BIR BITS işinin yaşam döngüsü, bir iş oluşturduğunuzda başlar. İş, aktaracak bir veya daha fazla dosya içeren bir kapsayıcıdır. bir iş ayrıca BITS'nin dosyaları nasıl aktardığını ve uygulamanızla nasıl etkileşim kuracağını belirten özelliklere de sahiptir. Örneğin, işin önceliğini, işin karşıya yükleme veya indirme işi olup olmadığını ve hangi olaylar için bildirim almak istediğinizi belirtebilirsiniz.
İşi oluşturduktan sonra, işe bir veya daha fazla dosya ekleyin (karşıya yükleme işleri yalnızca bir dosya içerebilir) ve özellik değerlerinden herhangi birini uygulamanız için uygun şekilde değiştirin. İşe bir dosya eklediğinizde, dosyanın hem yerel (istemci) hem de uzak (sunucu) adını belirtin. Uzak dosya adı HTTP, HTTPS veya SMB protokollerini kullanmalıdır. bir iş içindeki dosyalar sıralı olarak işlenir (ilk önce, ilk çıkar).
BITS, işleri oluşturulduğunda otomatik olarak askıya alır. Aktarım kuyruğunda etkinleştirmek için işi sürdürmeniz gerekir. İstediğiniz zaman bir işi askıya alabilir veya sürdürebilirsiniz. İşin devam ettirilmesi, işi askıya alınmış durumdan kuyruğa alınmış duruma taşır. Zamanlayıcı dosyaları aktarma sırasının iş olduğunu belirleyene kadar iş kuyruğa alınmış durumda kalır. Tüm ön plan işleri tek bir arka plan işiyle eşzamanlı olarak çalışır. BITS, ön plan işleri içindeki dosyaları seri olarak işler.
Bir işin dosyaları aktarma sırası geldiğinde, BITS uzak sunucuya bağlanırken (uzak dosya adında belirtilen) iş bağlanma durumuna geçer. BITS uzak sunucuya bağlanabiliyorsa, iş zaman dilimi bitene, aktarım tamamlanana, hata oluşana veya uygulama işi askıya alana kadar kaldığı aktarım durumuna geçer.
İŞ, BITS işteki tüm dosyaları aktarana kadar kuyruğa alınan, bağlanan ve aktarılan durumlar arasında hareket eder. Bu noktada iş aktarılan duruma geçer. BITS, aynı öncelik düzeyindeki işleri zamanlamak için hepsini bir kez deneme zamanlamayı kullanır. Her işe dosyalarını işlemek için bir zaman dilimi verilir. İş, zaman dilimi sırasında tamamlanmazsa, iş kuyruğa alınmış duruma geri döner ve kuyruktaki bir sonraki iş etkinleştirilir. Bu, büyük işlerin daha küçük işleri engellemesini engeller. İşler büyük ölçüde ilk gelen ilk çıkar (FIFO) temelinde işlenir; ancak BITS hepsini bir kez deneme zamanlaması, iş hataları ve hizmet yeniden başlatmaları nedeniyle FIFO işlemeyi garanti edemez.
Aktarılan dosyalar, uygulama BITS'den kullanıcıya dosyaların sahipliğini aktarmak için IBackgroundCopyJob::Complete yöntemini çağırana kadar istemci tarafından kullanılamaz. Dosya sunucu tarafından başarıyla alındığında karşıya yükleme işleri de aktarılan duruma ayarlanır. Karşıya yükleme-yanıt işleri, dosya sunucuya başarıyla gönderildikten ve sunucu uygulamasından gelen yanıt başarıyla istemciye aktarıldıktan sonra aktarılan duruma ayarlanır.
Bir hata oluşursa, iş önemli veya geçici hata durumuna geçer. Önemli hatalar, BITS'nin kurtaramadığı veya düzeltilmesi için müdahale gerektiren hatalardır. Uygulama hatayı düzeltebiliyorsa, uygulama işi sürdürür ve BITS işi kuyruğa alınmış duruma taşır. Geçici hatalar, kendi kendine çözülebilecek hatalardır. BITS, aktarım başarılı olana veya iş zaman aşımına uğradıktan sonra işleri geçici hata durumunda yeniden dener. Uygulama tarafından belirtilen bir süre içinde ilerleme kaydedildiğinde iş zaman aşımına uğradı. İş zaman aşımına uğradıysa, BITS işi önemli hata durumuna taşır.
İş durumları hakkında daha fazla bilgi için bkz. BG_JOB_STATE.