如何运行返回值并获取参数的任务?我看到有一个重载方法,Task.Run<TResult>(Func<TResult>)但我如何在那里传递参数?
我正在尝试 Azure Durable 功能。目前,我在InvalidOperationException调用活动后进入编排功能。它抱怨检测到多线程执行。如果协调器功能之前从不受支持的异步回调中恢复,则可能会发生这种情况。
有没有人遇到过这样的问题?我做错了什么?完整代码可以在GitHub上找到
这是编排函数中的一行:
var res = await ctx.CallActivityAsync<int>("LengthCheck", "inputData");
Run Code Online (Sandbox Code Playgroud)
该LengthCheckactivitiy功能是:
[FunctionName("LengthCheck")]
public static Task<int> Calc([ActivityTrigger] string input)
{
var task = Task.Delay(TimeSpan.FromSeconds(5));
task.Wait();
return Task.FromResult(input.Length);
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪是:
ac6fd5cdd07a4dc9b2577657d65c4f27:函数“InpaintOrchestration(Orchestrator)”,版本“”失败并出现错误。原因:System.InvalidOperationException:检测到多线程执行。如果协调器功能之前从不受支持的异步回调中恢复,则可能会发生这种情况。
在 Microsoft.Azure.WebJobs.DurableOrchestrationContext.ThrowIfInvalidAccess()
在 Microsoft.Azure.WebJobs.DurableOrchestrationContext.d__47`1.MoveNext()
从上一个抛出异常的位置开始的堆栈跟踪结束
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()