Mar*_*lit 3 azure-functions azure-durable-functions
我有一个 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
}
Run Code Online (Sandbox Code Playgroud)
但出现以下错误:
检测到多线程执行。如果 Orchestrator 函数代码等待的任务不是由 DurableOrchestrationContext 方法创建的,则可能会发生这种情况。更多详细信息可以在这篇文章中找到 :https://learn.microsoft.com/en-us/azure/azure-functions/durable-functions-checkpointing-and-replay#orchestrator-code-constraints。
那里的官方文档建议使用 context.CallHttpAsync- 正是我所做的。
当IDurableOrchestrationContext方法抛出此异常时,意味着您使用协调器线程以外的线程调用该方法。这里的问题不一定是调用CallHttpAsync,而是代码中的其他内容启动了一个新线程。在大多数情况下,这是由前一行代码await中的非法语句引起的 - 例如.await Task.Delay(1000)
如果您可以使用完整的编排描述更新您的帖子,那么我们应该能够更轻松地指出问题所在。
另外,请考虑使用Durable Functions Roslyn 分析器来帮助主动检测这些类型的编码错误(本周晚些时候将推出一个新版本,修复了一系列已知问题)。
| 归档时间: |
|
| 查看次数: |
2512 次 |
| 最近记录: |