Zaman Uyumsuz Programlama Modeli (APM)

Tasarım desenini IAsyncResult kullanan zaman uyumsuz bir işlem, sırasıyla operationName zaman uyumsuz işlemini başlatan ve EndOperationName sonlandıran adlı BeginOperationName iki yöntem olarak uygulanır. Örneğin, FileStream sınıfı bir dosyadaki baytları BeginRead zaman uyumsuz olarak okumak için ve EndRead yöntemlerini sağlar. Bu yöntemler yöntemin zaman uyumsuz sürümünü Read uygular.

Not

.NET Framework 4'den başlayarak, Görev Paralel Kitaplığı zaman uyumsuz ve paralel programlama için yeni bir model sağlar. Daha fazla bilgi için bkz . Görev Paralel Kitaplığı (TPL) ve Görev Tabanlı Zaman Uyumsuz Desen (TAP)).

çağrısından BeginOperationNamesonra, zaman uyumsuz işlem farklı bir iş parçacığında gerçekleşirken bir uygulama çağrılan iş parçacığında yönergeleri yürütmeye devam edebilir. her çağrısı için BeginOperationName, uygulamanın işlemin sonuçlarını almak için de çağrısı EndOperationName yapması gerekir.

Zaman Uyumsuz İşlem Başlat

yöntemi, BeginOperationName OperationName zaman uyumsuz işlemini başlatır ve arabirimini uygulayan IAsyncResult bir nesne döndürür. IAsyncResult nesneleri zaman uyumsuz bir işlemle ilgili bilgileri depolar. Aşağıdaki tabloda zaman uyumsuz işlem hakkındaki bilgiler gösterilmektedir.

Üye Açıklama
AsyncState Zaman uyumsuz işlem hakkında bilgi içeren isteğe bağlı bir uygulamaya özgü nesne.
AsyncWaitHandle WaitHandle Zaman uyumsuz işlem tamamlanana kadar uygulama yürütmesini engellemek için kullanılabilecek bir.
CompletedSynchronously Ayrı ThreadPool bir iş parçacığında tamamlamak yerine çağrı BeginOperationName yapmak için kullanılan iş parçacığında zaman uyumsuz işlemin tamamlanıp tamamlanmadığını gösteren değer.
IsCompleted Zaman uyumsuz işlemin tamamlanıp tamamlanmadığını gösteren değer.

Yöntem BeginOperationName , yöntemin zaman uyumlu sürümünün imzasında bildirilen ve değere veya başvuruya göre geçirilen parametreleri alır. Out parametreleri yöntem imzasının BeginOperationName bir parçası değildir. Yöntem BeginOperationName imzası iki ek parametre de içerir. Bunlardan ilki, zaman uyumsuz işlem tamamlandığında çağrılan bir yönteme başvuran bir temsilci tanımlar AsyncCallback . Çağıran, işlem tamamlandığında bir yöntemin çağrılmasını istemiyorsa (Nothing Visual Basic'te) belirtebilir null . İkinci ek parametre, kullanıcı tanımlı bir nesnedir. Bu nesne, zaman uyumsuz işlem tamamlandığında çağrılan yönteme uygulamaya özgü durum bilgilerini geçirmek için kullanılabilir. Bir BeginOperationName yöntem, bir dosyadan okunan baytları depolamak için bayt dizisi gibi işleme özgü ek parametreler alırsa, AsyncCallback ve uygulama durumu nesnesi yöntem imzasında BeginOperationName son parametrelerdir.

BeginOperationName denetimi çağıran iş parçacığına hemen döndürür. BeginOperationName Yöntem özel durumlar oluşturursa, zaman uyumsuz işlem başlatılmadan önce özel durumlar oluşturulur. BeginOperationName yöntemi özel durumlar oluşturursa geri çağırma yöntemi çağrılmıyor.

Zaman Uyumsuz İşlemi Sonlandırma

yöntemi, EndOperationName OperationName zaman uyumsuz işlemini sonlandırır. yönteminin EndOperationName dönüş değeri, zaman uyumlu karşılığı tarafından döndürülen türle aynıdır ve zaman uyumsuz işleme özgüdür. Örneğin, EndRead yöntemi bir'den FileStream okunan bayt sayısını döndürür ve EndGetHostByName yöntemi bir konak bilgisayar hakkında bilgi içeren bir IPHostEntry nesne döndürür. yöntemi, EndOperationName yöntemin zaman uyumlu sürümünün imzasında bildirilen tüm out veya ref parametrelerini alır. Zaman uyumlu yöntemdeki parametrelere ek olarak, EndOperationName yöntem bir IAsyncResult parametre de içerir. Arayanlar, karşılık gelen çağrı tarafından döndürülen örneği adresine BeginOperationNamegeçirmelidir.

Nesne tarafından IAsyncResult temsil edilen zaman uyumsuz işlem çağrıldığında EndOperationName tamamlanmamışsa, EndOperationName zaman uyumsuz işlem tamamlanana kadar çağıran iş parçacığını engeller. Zaman uyumsuz işlem tarafından oluşan özel durumlar yönteminden EndOperationName oluşturulur. Yöntemi aynı ile birden çok kez çağırmanın EndOperationNameIAsyncResult etkisi tanımlanmamıştır. Benzer şekilde, EndOperationName ilgili Begin yöntemi tarafından döndürülmeyen bir IAsyncResult ile yöntemini çağırma da tanımlanmamıştır.

Not

Tanımlanmamış senaryolardan biri için uygulayıcılar oluşturmayı InvalidOperationExceptiondüşünmelidir.

Not

Bu tasarım deseninin uygulayıcıları, zaman uyumsuz geri çağırma yöntemini çağırarak (belirtildiyse) ve sinyal vererek zaman uyumsuz işlemin true olarak ayarlanarak IsCompleted tamamlandığını çağırana AsyncWaitHandlebildirmelidir.

Uygulama geliştiricilerinin zaman uyumsuz işlemin sonuçlarına erişmek için çeşitli tasarım seçenekleri vardır. Doğru seçim, uygulamanın işlem tamamlarken yürütülebilecek yönergeleri olup olmadığına bağlıdır. Bir uygulama zaman uyumsuz işlemin sonuçlarını alıncaya kadar ek bir çalışma gerçekleştiremezse, sonuçlar kullanılabilir olana kadar uygulamanın engellemesi gerekir. Zaman uyumsuz bir işlem tamamlanana kadar engellemek için aşağıdaki yaklaşımlardan birini kullanabilirsiniz:

  • uygulamanın ana iş parçacığından çağrı EndOperationName yap ve işlem tamamlanana kadar uygulama yürütmeyi engelle. Bu tekniği gösteren bir örnek için bkz . Zaman Uyumsuz İşlemi Sonlandırarak Uygulama Yürütmeyi Engelleme.

  • Bir veya daha fazla işlem tamamlanana kadar uygulama yürütmesini engellemek için kullanın AsyncWaitHandle . Bu tekniği gösteren bir örnek için bkz . AsyncWaitHandle Kullanarak Uygulama Yürütmeyi Engelleme.

Zaman uyumsuz işlem tamamlarken engellenmesi gerekmeyen uygulamalar aşağıdaki yaklaşımlardan birini kullanabilir:

  • Özelliği düzenli aralıklarla denetleyerek IsCompleted ve işlem tamamlandığında çağırarak EndOperationName işlem tamamlanma durumunu yoklama. Bu tekniği gösteren bir örnek için bkz . Zaman Uyumsuz İşlemin Durumu için Yoklama.

  • İşlem tamamlandığında çağrılacak yöntemi belirtmek için bir AsyncCallback temsilci kullanın. Bu tekniği gösteren bir örnek için bkz . Zaman Uyumsuz İşlemi Sonlandırmak için AsyncCallback Temsilcisi Kullanma.

Ayrıca bkz.