次の方法で共有


WS_CALLBACK_MODEL列挙 (webservices.h)

コールバックのスレッド動作 ( たとえば、WS_ASYNC_CALLBACK) を指定します。

構文

typedef enum {
  WS_SHORT_CALLBACK = 0,
  WS_LONG_CALLBACK = 1
} WS_CALLBACK_MODEL;

定数

 
WS_SHORT_CALLBACK
値: 0
この値は、コールバックが短く呼び出されることを示すために使用されます。


コールバックが短く呼び出されると、長い計算や長い計算を避ける必要があります
呼び出しをブロックして、呼び出し元にすばやく戻ることができるようにします。 期間中
コールバックが短く実行されている場合、他の作業項目は実行できない可能性があります。
プロセス内で dequeued。 これにより、枯渇デッドロックが発生する可能性があります。
応答しないシステム、または使用率の低いシステム。


短く呼び出されたコールバック内で IO を実行する必要がある場合は、ベスト プラクティスは次のようになります。
非同期 IO (同期 IO の代わりに) を使用する場合は、長いブロック呼び出しを回避します。
WS_LONG_CALLBACK
値: 1
この値は、コールバックが長く呼び出されることを示すために使用されます。


呼び出し元にすばやく戻るために、long を呼び出したコールバックは必要ありません。


ただし、長いコールバックは限られたリソースであるため、常に可能であるとは限りません
コールバック long を呼び出す場合は 。


コールバックを長く呼び出す前に、呼び出し元は別のスレッドがあることを確認する必要があります
必要に応じて作業をデキューできます。 たとえば、呼び出し元が作成する必要がある場合
スレッドができません。その後、コールバック short を呼び出す必要があります。


すべてのコールバックは、短いだけでなく、長い間呼び出されることに対処できる必要があります。

  • 短く呼び出されるが long を必要とするコールバックは、これを として解釈できます。
    リソースが少ないために発生する可能性があります。 たとえば、CreateThread または
    この状況では QueueUserWorkItem も失敗する可能性があります。 評価
    コールバックは、リソースが少ない状況で長く実行する必要があります。その後、スレッド
    この目的のためには、非同期操作を開始する前に予約する必要があります。

  • 長く呼び出されるが short を期待するコールバックは、通常どおりに動作する可能性があります。

注釈

コールバックが long または short のどちらを呼び出すかは、呼び出し元の実装にかかります。 チャネルとリスナーの実装では、WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL および WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL プロパティを使用して非同期コールバックに対してこれを制御する方法が提供されます。

要件

要件
サポートされている最小のクライアント Windows 7 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリ |UWP アプリ]
Header webservices.h