Aracılığıyla paylaş


Zaman Uyumsuz Programlama Modeli (APM)

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

Uyarı

.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).

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

Asenkron İşlem Başlatma

BeginOperationName yöntemi, OperationName zaman uyumsuz işlemini başlatır ve IAsyncResult arabirimini uygulayan 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 Uygulama yürütmesini, zaman uyumsuz işlem tamamlanana kadar engellemek için kullanılabilecek bir WaitHandle.
CompletedSynchronously BeginOperationName çağrısını yapmak için kullanılan iş parçacığının, ayrı bir ThreadPool iş parçacığı yerine zaman uyumsuz işlemin bu iş parçacığında tamamlanıp tamamlanmadığını belirten bir değer.
IsCompleted Zaman uyumsuz işlemin tamamlanıp tamamlanmadığını gösteren değer.

BeginOperationName yöntemi, yöntemin senkron sürümünün imzasında bildirilmiş ve değere veya başvuruya göre geçirilmiş olan herhangi bir parametreyi 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ılacak bir yöntemi işaret eden bir AsyncCallback temsilci tanımlar. Çağıran, bir yöntemin çağrılmasını istemiyorsa (null Visual Basic'te) işlem tamamlandığında Nothing belirtebilir. İ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 kontrolü, çağıran iş parçacığına anında döndürür. BeginOperationName Yöntemi özel durumlar fırlatırsa, özel durumlar asenkron işlem başlatılmadan önce fırlatılır. BeginOperationName yöntemi özel durumlar oluşturursa geri çağırma yöntemi çağrılmıyor.

Zaman Uyumsuz İşlemi Sonlandırma

yöntemi, EndOperationNameOperationName 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. EndOperationName yöntemi, yöntemin senkron 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, ilgili çağrı tarafından döndürülen örneği BeginOperationName'ye iletmelidir.

IAsyncResult nesnesi tarafından temsil edilen zaman uyumsuz işlem, EndOperationName çağrıldığında tamamlanmamışsa, EndOperationName zaman uyumsuz işlem tamamlanana kadar çağrıyı yapan iş parçacığını engeller. Zaman uyumsuz işlem tarafından atılan özel durumlar EndOperationName yönteminden atılır. Aynı EndOperationName ile IAsyncResult yöntemini birden fazla kez çağırmanın etkisi tanımlanmamıştır. Benzer şekilde, ilgili Begin yöntemi tarafından döndürülmemiş bir EndOperationName ile IAsyncResult yöntemini çağırmak da tanımlı değildir.

Uyarı

Tanımlanmamış senaryoların herhangi biri için uygulayıcılar InvalidOperationException fırlatmayı düşünmelidir.

Uyarı

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

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:

Zaman uyumsuz işlemin tamamlanması sırasında engellenmesi gerekmeyen uygulamalar aşağıdaki yaklaşımlardan birini kullanabilir:

Ayrıca bakınız