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 BeginOperationName
sonra, 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 BeginOperationName
geç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 EndOperationName
IAsyncResult 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.