Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
uygulamanın ana iş parçacığından çağrı
EndOperationNameyap 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şlemin tamamlanması sırasında engellenmesi gerekmeyen uygulamalar aşağıdaki yaklaşımlardan birini kullanabilir:
İşlem tamamlanma durumunu yoklamak için IsCompleted özelliğini düzenli aralıklarla kontrol edin ve işlem tamamlandığında
EndOperationNameöğesini çağırın. Bu tekniği örnekleyen bir durumu incelemek için bkz. Asenkron İşlemin Durumu için Durum Sorgulama.İş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. Asenkron İşlemi Sonlandırmak için AsyncCallback Delege Kullanma.