Aracılığıyla paylaş


Zaman Uyumsuz Model

Windows Web Hizmetleri API'sindeki işlemlerin çoğu zaman uyumlu veya zaman uyumsuz olarak gerçekleştirilebilir. Bir işlevi zaman uyumlu olarak çağırmak için WS_ASYNC_CONTEXT yapısı için null bir değer geçirin. Bir işlevin zaman uyumsuz olarak gerçekleştirilebileceğini belirtmek için işleve null olmayan bir WS_ASYNC_CONTEXT geçirin.

Zaman uyumsuz olarak çağrıldığında, bir işlev yine de zaman uyumlu veya zaman uyumsuz olarak tamamlanabilir. İşlev zaman uyumlu bir şekilde tamamlanırsa, son başarıyı veya hatayı gösteren bir değer döndürür ve bu değer her zaman WS_S_ASYNC dışında bir değerdir (Bkz. Windows Web Services Dönüş Değerleri). Ancak WS_S_ASYNCdönüş değeri, işlevin zaman uyumsuz olarak tamamlandığını gösterir. İşlev zaman uyumsuz olarak tamamlandığında, işlemin tamamlanmasının sinyalini almak için bir geri çağırma çağrılır. Bu geri çağırma son başarıyı veya hata değerini gösterir. İşlem zaman uyumlu olarak tamamlanırsa geri çağırma çağrılmaz.

Zaman uyumsuz bağlam oluşturmak için geri çağırma başlatın ve WS_ASYNC_CONTEXT yapısının callbackState alanlarını. callbackState alanı, WS_ASYNC_CALLBACK işlevine geçirilen kullanıcı tanımlı verilere bir işaretçi belirtmek için kullanılır.

Aşağıdaki örnek, bir işaretçiyi geri çağırmayı içeren bir WS_ASYNC_CONTEXT yapısına ve durum verilerine yönelik bir işaretçi geçirerek bir işlevi zaman uyumsuz olarak çağırmayı gösterir.

HRESULT ExampleAsyncFunction(WS_ASYNC_CONTEXT* asyncContext);
void ExampleAsyncFunction()
{
    // Set up the WS_ASYNC_CONTEXT structure.
    MyState* myState = ...;  \\ Declare a pointer to user-defined data.
    WS_ASYNC_CONTEXT asyncContext;
    asyncContext.callback = MyCallback;  \\ Set the callback.
    asyncContext.callbackState = myState; \\ Set the pointer to the user-defined data.

    // Start the asynchronous operation
    HRESULT hr = SomeFunction(&asyncContext);

    if (hr == WS_S_ASYNC)
    {
        // The operation is completing asynchronously.  The callback is called 
        // when the operation is complete.
    }
    else
    {
        // The operation completed synchronously.  The callback is not called.
    }
}
void CALLBACK MyCallback(HRESULT hr, WS_CALLBACK_MODEL callbackModel, void* callbackState)
{
    MyState* myState = (MyState*)callbackState;

    // The operation completed asynchronously.
}

WS_ASYNC_CONTEXT yapısı, zaman uyumsuz işlev tarafından yalnızca işlev çağrısı süresince (zaman uyumsuz işlem süresi için değil) kullanılır, böylece bunu yığında güvenle bildirebilirsiniz.

WS_ASYNC_CONTEXT yapısının yanı sıra başka parametreler de zaman uyumsuz bir işleve işaretçi olarak geçirilirse ve işlev zaman uyumsuz olarak tamamlanırsa, zaman uyumsuz geri çağırma çağrılana kadar bu parametreler tarafından işaret edilen değerleri etkin (serbest bırakmadan) tutmak çağıranın sorumluluğundadır.

Geri çağırmanın gerçekleştirebileceği işlemlerle ilgili sınırlamalar vardır. Olası işlemler hakkında daha fazla bilgi için bkz. WS_CALLBACK_MODEL.

Zaman uyumsuz bir işlev uyguladığınızda, zaman uyumsuz işlev çağırana döndürülmeden önce zaman uyumsuz işlevi çağıran aynı iş parçacığında geri çağırmayın, bu da zaman uyumsuz modeli kesintiye uğratır.

Bir dizi zaman uyumsuz işlem yürütmesi gereken bir işlev uygularken WsAsyncExecute yardımcı işlevini kullanmayı göz önünde bulundurun.

Zaman Uyumsuz İşlev Örneği, zaman uyumsuz modeli izleyen işlevlerin nasıl uygulanıp tüketildiğini gösterir.

Zaman uyumsuz GÇ işlemini başlatmak sistem kaynaklarını tüketir. Yeterli GÇ işlemi başlatılırsa sistem yanıt vermemeye başlayabilir. Bunu önlemek için, bir uygulamanın başlattığı zaman uyumsuz işlemlerin sayısını sınırlaması gerekir.

Zaman uyumsuz model aşağıdaki API öğelerini kullanır.

Geri çağırma Açıklama
WS_ASYNC_CALLBACK Zaman uyumsuz modelle kullanılan geri çağırma işlevi parametresi.
WS_ASYNC_FUNCTION Bir dizi zaman uyumsuz işlemde çağrılacak sonraki işlevi belirtmek için WsAsyncExecute ile birlikte kullanılır.

 

Sayım Açıklama
WS_CALLBACK_MODEL Geri çağırmanın iş parçacığı davranışını belirtir (örneğin, bir WS_ASYNC_CALLBACK).

 

Fonksiyon Açıklama
WsAsyncExecute Zaman uyumsuz bir işlem başlatabilen ve zaman uyumsuz işlem tamamlandığında çağrılacak bir işlevi gösteren kullanıcı tanımlı bir geri çağırma çağırır.

 

Yapı Açıklama
WS_ASYNC_CONTEXT Zaman uyumsuz geri çağırmayı ve zaman uyumsuz geri çağırmaya geçirilecek kullanıcı tanımlı verilere yönelik bir işaretçiyi belirtir.
WS_ASYNC_OPERATION Bir dizi zaman uyumsuz işlemde çağrılacak sonraki işlevi belirtmek için WsAsyncExecute ile birlikte kullanılır.
WS_ASYNC_STATE WsAsyncExecute tarafından zaman uyumsuz işlemin durumunu yönetmek için kullanılır.

 

Zaman Uyumsuz İşlev Örneği

WS_ASYNC_CALLBACK

WS_ASYNC_CONTEXT

WS_CALLBACK_MODEL

WsAsyncExecute