我正在尝试使用子编排器构建一个简单的编排器func附加调用。问题出现在主编排器中,并调用以等待ctx。CallSubOrchestratorAsync(“sub orchestration”,someInput)-如果我将sub Orchistrator中的代码从await Send_SomeData()更改,则任务永远不会解析/完成;发送_SomeData()。等待();那就行了,但这不是我想要的。据我所知,编排功能支持异步/等待
谢谢!
代码如下:
主编曲
[FunctionName("main-orchestration")]
public static async Task MainOrchestrationAsync(
[OrchestrationTrigger] IDurableOrchestrationContext ctx,
ILogger log)
{
var someInput = "my msg";
await ctx.CallSubOrchestratorAsync("sub-orchestration", someInput);
log.LogWarning("finish");
}
副指挥
[FunctionName("sub-orchestration")]
public static async Task SubOrchestrationAsync(
[OrchestrationTrigger] IDurableOrchestrationContext ctx,
ILogger log)
{
log.LogWarning("Sub Start");
await Send_SomeData(some_url, some_message);
log.LogWarning("Sub End");
}
发送_一些数据
public static async Task<string> ConnectAsync(string url, string message)
{
using var request = new HttpRequestMessage
{
RequestUri = new Uri(url),
Method = HttpMethod.Post,
Content = new FormUrlEncodedContent(new[]
{
...message...
})
};
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
更新:我决定从头开始创建一个示例,以避免遗漏某些内容,并获得可以复制/粘贴以进行调试的内容。下面是另一个例子。日志消息的主端从未出现,因此.CallSubOrchestratorAsync中的任务从未解析。
我错过了什么?再次感谢!
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace _Await_Issue
{
public static class Function1
{
[FunctionName("Main")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context,
ILogger log)
{
log.LogWarning("Main Start");
try
{
await context.CallSubOrchestratorAsync("Sub", null);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
log.LogWarning("Main End");
}
[FunctionName("Sub")]
public static async Task RunSubOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context,
ILogger log)
{
log.LogWarning("Sub Start");
var data = await GetDataAsync("https://www.google.com");
log.LogWarning("Sub End");
}
[FunctionName("Start")]
public static async Task<HttpResponseMessage> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]
HttpRequestMessage req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
// Function input comes from the request content.
string instanceId = await starter.StartNewAsync("Main", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
public static async Task<string> GetDataAsync(string url)
{
var httpClient = new HttpClient();
using var request = new HttpRequestMessage
{
RequestUri = new Uri(url),
Method = HttpMethod.Get,
};
var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
}
我在这里找到了光))回答我自己的问题,因为它可能会帮助别人。
正如彼得·邦斯(Peter Bons)所指出的那样Send_SomeData方法受到怀疑))
一般来说,问题出在“确定性 Api”中,因为 Azure 团队在文档确定性 API 说明中调用
在我的例子中,Send_SomeData inside使用HttpClient与外部endpoint通信。不建议这样做,因为这可能会导致意外的行为,就像我使用await的情况一样...
如果有这样的代码部分(例如,在我的例子中是Send_SomeData),则将其放在活动中,并使用上下文调用它。CallActivityAsync()-(请注意,Activity funcs的执行时间有限)
Orchestrator 是 MySQL 复制拓扑管理和可视化工具,支持: 检测和审查复制集群 安全拓扑重构:转移服务于另外一台计算机的系统拓扑S 整洁的拓扑可视化 复制问题可视化 通过简单的拖拽修改拓扑 维护模式声明和执行 审计操作 重构拓扑只需要简单的拖拽。Orchestrator 会保证安全,并且禁止非法复制拓扑。
我正在努力将Activiti BPMN与我的JavaWebApp集成。我已经成功地定义了流程,并根据我的要求执行了它,尽管我陷入了一个问题,需要我从当前执行的任务中找到所有未来可能发生的任务。 假设在我的XML中,我有一个工作流,其中有4个任务,如任务a,然后是一个专用网关,然后还有3个任务。我当前执行的任务是任务A,现在我想知道未来任务的可能性(即网关后的3个任务)。无论如何这可能吗? 我被困在
我正在将一些用于iOS和OSX的Ant构建转换为Gradle。创建了以下内容: 这可能很简单,但我做错了什么?如何从自定义类中调用exec任务?
我需要自定义我的任务,以便它: 像往常一样处理所有类; 只包含特定的资源,并将它们放入jar中的自定义文件夹中。 我已经做了自定义罐任务,这是我想要的: 但我仍然需要用一个新的罐子替换内置的罐子。 将其替换为 ...产量 简单地配置任务不起作用,因为它已经在JavaPlugin中配置好了: 所以,我需要的是从的配置中重写(覆盖)默认的
我正在尝试在server 2012任务计划程序中计划bcp作业。当我双击批处理文件时,它工作正常。它包括以下行: 该文件是从命令行创建的。调度程序具有: < li >操作:启动一个程序 < li >脚本:< code > D:\ DATA \ my batch . bat < li >开始于:< code>D:\Data 我正在为其他计划任务使用相同的帐户,它们运行良好。