«Обнаружено многопоточное выполнение» при использовании context.CallHttpAsyn - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть функция OrchestrationTrigger, которая вызывает HTTP-запрос другой службы.

 [FunctionName("MyFunc")]
        public async Task RunOrchestrator(
        [OrchestrationTrigger] IDurableOrchestrationContext context,
        ILogger logger)
    {
        var req = new DurableHttpRequest(HttpMethod.Post, _uri, headers, jsonBody);
        var res = await context.CallHttpAsync(req);
        // Do something
    }

, но получаю следующую ошибку:

Обнаружено многопоточное выполнение. Это может произойти, если код функции оркестратора ожидает выполнения задачи, которая не была создана методом DurableOrchestrationContext. Более подробную информацию можно найти в этой статье https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-checkpointing-and-replay#orchestrator -код-ограничения .

Официальная документация предлагает использовать context.CallHttpAsync - именно то, что я сделал.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Я обновил Microsoft. Azure .WebJobs.Extensions.DurableTask и Microsoft. NET .Sdk.Функции и проблема исчезла

0 голосов
/ 25 февраля 2020

Когда метод IDurableOrchestrationContext выдает это исключение, это означает, что вы вызвали метод, используя поток, отличный от потока оркестратора. Проблема здесь не обязательно в вызове CallHttpAsync, а скорее в том, что что-то еще в вашем коде привело к появлению нового потока. В большинстве случаев это вызвано недопустимым оператором await в некоторой предыдущей строке кода - например, await Task.Delay(1000).

Если вы можете обновить свое сообщение с полным описанием оркестровки, тогда мы сможем более легко указать, где проблема.

Кроме того, рассмотрите возможность использования Roslyn Analyzer Durable Functions для проактивного обнаружения этих типов ошибок кодирования (будет позднее на этой неделе будет доступна новая версия, которая устраняет множество известных проблем).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...