Поделиться через


Перечисление 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
Это значение используется, чтобы указать, что обратный вызов вызывается коротким.


При вызове обратного вызова short следует избегать длительных вычислений или длительных вычислений.
блокирование вызовов, чтобы можно было быстро вернуться к вызывающему объекту. В течение времени
что обратный вызов выполняется коротко, другие рабочие элементы могут быть недоступны
вывод из очереди в рамках процесса. Это может привести к взаимоблокировку голода,
система, не отвечающая на запросы, или недостаточно загруженная система.


Если необходимо выполнить операции ввода-вывода в обратном вызове, который был вызван коротким, рекомендуется
для использования асинхронного ввода-вывода (вместо синхронного ввода-вывода), чтобы избежать длительных блокирующих вызовов.
WS_LONG_CALLBACK
Значение: 1
Это значение используется, чтобы указать, что обратный вызов вызывается долго.


Обратный вызов, вызываемый в течение длительного времени, не требуется, чтобы быстро вернуться к вызывающей объекту.


Однако длительные обратные вызовы являются ограниченным ресурсом, поэтому это не всегда возможно.
, чтобы вызвать обратный вызов long.


Перед длительным вызовом обратного вызова вызывающий объект должен убедиться в наличии другого потока.
доступны для вывода работы в очередь по мере необходимости. Например, если вызывающему объекту необходимо создать
поток, но не может, то он должен вызвать обратный вызов short.


Все обратные вызовы должны иметь возможность работать с вызовом как короткие, так и длинные:

  • Обратный вызов, который вызывается коротким, но требует long, может интерпретировать его как
    состояние ошибки, вероятно, из-за нехватки ресурсов. Например, вызов CreateThread или
    QueueUserWorkItem в этой ситуации также может завершиться ошибкой. Если
    Обратный вызов требуется для длительного выполнения в ситуации нехватки ресурсов, а затем потока
    для этой цели необходимо зарезервировать перед инициализацией асинхронной операции.

  • Обратный вызов, который вызывается долго, но ожидает короткий, может работать нормально.

Комментарии

Будет ли обратный вызов вызываться длинным или коротким, определяется реализацией вызывающего объекта. Реализации канала и прослушивателя предоставляют способ управления этим для асинхронных обратных вызовов с помощью свойств WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL и WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL .

Требования

Требование Значение
Минимальная версия клиента Windows 7 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2 [классические приложения | Приложения UWP]
Верхняя часть webservices.h