| Предыдущий | Следующий |
| CRYPT_I_NEW_PROTECTION_REQUIRED | NS_S_CALLABORTED |
NS_S_CALLPENDING
Операция Windows Media остаётся в состоянии ожидания
NS_S_CALLPENDING — HRESULT 851968 (0x000D0000) из Windows Media. AllStat описывает его как «Запрошенная операция ожидает завершения». Бит severity не указывает на сбой, однако значение сообщает конкретное состояние и не должно сводиться к обычному S_OK.
В устаревшем конвейере Windows Media или состоянии Player NS_S_CALLPENDING означает, что запрошенная операция ожидает завершения. Перед тем как объявить NS_S_CALLPENDINGзавершённым, вызывающий код должен согласовать специфичный для этого кода переход состояния и все пригодные выходные данные.
Где встречается этот статус
NS_S_CALLPENDINGможет возвращаться в callbacks источника, reader, writer или renderer Windows Media; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.NS_S_CALLPENDINGможет возвращаться при автоматизации через Windows Media Player SDK; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.NS_S_CALLPENDINGможет возвращаться в состояниях media graph, playlist, image, rights или buffering; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
Поскольку NS_S_CALLPENDING является информационным статусом, языковая оболочка может показать его как успех и скрыть символическое различие. Сохраняйте исходный HRESULT, пока не отработана ветвь, специфичная для этого кода.
Что должно быть истинно перед принятием результата
Для NS_S_CALLPENDINGубедитесь, что вызывающий код сохраняет состояние операции и ожидает асинхронное уведомление о её завершении. Без такого доказательства NS_S_CALLPENDING может скрыть ошибку вызывающего кода, хотя бит severity этого HRESULT не указывает на сбой.
Перед компенсацией или вторым вызовом согласуйте побочные эффекты, связанные с NS_S_CALLPENDING .
Данные и телеметрия
- Для
NS_S_CALLPENDINGсохраните идентичность операции и объекта. - Для
NS_S_CALLPENDINGсохраните регистрацию callback или события. - Для
NS_S_CALLPENDINGсохраните текущий URL медиа. - Для
NS_S_CALLPENDINGсохраните время начала ожидания. - Для
NS_S_CALLPENDINGсохраните итоговый статус завершения.
Также зафиксируйте ns_s_callpending_operation, ns_s_callpending_state_before, ns_s_callpending_state_afterвремя UTC, идентификаторы процесса и потока, версию компонента и correlation ID. Телеметрия для NS_S_CALLPENDING не должна содержать учётные данные, но должна сохранять несекретные идентификаторы объектов и сведения о версиях.
Последовательность диагностики
- Зафиксируйте исходное значение
0x000D0000до того, как оболочки, знаковое десятичное форматирование, исключения или общая обработка успеха заменятNS_S_CALLPENDING. - Определите операцию, вернувшую
NS_S_CALLPENDINGвключая интерфейс или callback, сборку компонента, поток, процесс и фазу машины состояний. - Для
NS_S_CALLPENDINGдокажите решающее условие: вызывающий код сохраняет состояние операции и ждёт асинхронное уведомление о её завершении. - Проверьте каждый выходной параметр, счётчик, массив статусов, буфер, callback, состояние задачи, временную метку медиа, голос транзакции или security token, остающийся частью контракта
NS_S_CALLPENDING. - Сравните состояние непосредственно до и после
NS_S_CALLPENDING; success severity не гарантирует завершения необязательной работы или высокоуровневого действия, которого ожидал вызывающий код. - Воспроизведите
NS_S_CALLPENDINGна минимальном входе, сохраняющем то же условие, затем измените только зафиксированную причину и повторите операцию.
Правильная обработка и восстановление
Не используйте окончательные выходные данные и не выдавайте конфликтующие вызовы. Отслеживайте завершение, отмену и timeout через тот объект Windows Media, который запустил операцию.
Повторяйте NS_S_CALLPENDING только после изменения документированного входа или состояния. Неизменный повтор после NS_S_CALLPENDING полезен только если API документированно продвигается по состояниям при повторных вызовах.
Отличие от соседних результатов
NS_S_CALLPENDING нужно отличать от обычного S_OK и от значений того же семейства API, у которых бит severity указывает на сбой; документированное состояние определяет следующее действие.
Правильное отделение NS_S_CALLPENDING от соседних значений выбирает корректный путь продолжения и cleanup.
Практический сценарий
Открытие сетевого источника возвращает pending. Player сохраняет объект источника и включает элементы управления воспроизведением только после события open-complete.
Регрессионный тест должен воспроизвести NS_S_CALLPENDINGпроверить соответствующие выходные данные и состояние, затем изменить только решающее условие и убедиться в ожидаемом соседнем результате или обычном завершении.
Рекомендации разработчикам и администраторам
Когда NS_S_CALLPENDING проходит через границы COM, RPC, managed code, scripting или logging, сохраняйте беззнаковое 32-битное значение. Тесты должны проверять постусловие, закодированное в NS_S_CALLPENDINGа не только то, что бит severity означает успех.
Для NS_S_CALLPENDINGдокументируйте владельца повторов, отмены, cleanup и пользовательских сообщений. Для NS_S_CALLPENDINGменяйте конфигурацию или состояние ответственного компонента только после того, как собранные данные подтвердят причинную связь.
Ссылки
- Microsoft: коды ошибок Windows Media Format SDK — официальный материал Microsoft для интерпретации
NS_S_CALLPENDING. - Microsoft: Windows Media Player SDK — официальный материал Microsoft для интерпретации
NS_S_CALLPENDING. - Microsoft: событие buffering в Windows Media Player — официальный материал Microsoft для интерпретации
NS_S_CALLPENDING. - Microsoft: значения HRESULT — официальный материал Microsoft для интерпретации
NS_S_CALLPENDING.
Нужно найти другой код? Найти другой код состояния или ошибки.