C# 如何在Azure持久功能中终止具有自定义状态的持久业务流程

C# 如何在Azure持久功能中终止具有自定义状态的持久业务流程,c#,azure,azure-durable-functions,C#,Azure,Azure Durable Functions,我有一个持久的函数,其大致轮廓如下面的代码块所示。 如果我最终进入else部分,那是因为功能问题(在本例中,因为我没有缓存身份验证详细信息)。我想“自行终止”我编排的当前实例。我可以通过抛出一个异常来实现这一点,但我希望找到一种更简洁的方法(如果有)来终止活动实例,并显示一条友好的消息,指明终止的原因 这可能吗?如果可能,如何实现 [FunctionName(nameof(UserHistorySyncWorkflow))] 公共异步任务RunOrchestrator( [Orchestrati

我有一个持久的函数,其大致轮廓如下面的代码块所示。 如果我最终进入else部分,那是因为功能问题(在本例中,因为我没有缓存身份验证详细信息)。我想“自行终止”我编排的当前实例。我可以通过抛出一个异常来实现这一点,但我希望找到一种更简洁的方法(如果有)来终止活动实例,并显示一条友好的消息,指明终止的原因

这可能吗?如果可能,如何实现

[FunctionName(nameof(UserHistorySyncWorkflow))]
公共异步任务RunOrchestrator(
[OrchestrationTrigger]IDurableOrchestrationContext orchestrationContext,ILogger记录器)
{
if(CanConnect())
{
//调用活动函数并返回结果
}
其他的
{
//如何在这里优雅地结束?
}
}

您只需从else块返回即可。它将优雅地结束。但状态将为“已完成”,无法自定义状态。您可以根据原因记录消息

[FunctionName(nameof(UserHistorySyncWorkflow))]
public async Task<List<Match>> RunOrchestrator(
  [OrchestrationTrigger] IDurableOrchestrationContext orchestrationContext, ILogger logger)
{
  if(CanConnect())
  {
    // Call Activity function and return results
  }
  else
  {
    // Gracefully terminating.
    logger.LogInformation("Exiting since nothing to do!");
    return null;
  }
}
[FunctionName(nameof(UserHistorySyncWorkflow))]
公共异步任务RunOrchestrator(
[OrchestrationTrigger]IDurableOrchestrationContext orchestrationContext,ILogger记录器)
{
if(CanConnect())
{
//调用活动函数并返回结果
}
其他的
{
//优雅地终止。
logger.LogInformation(“由于无事可做而退出!”);
返回null;
}
}

如果您想标记为“失败”,只需抛出异常。我看这没什么问题

[FunctionName(nameof(UserHistorySyncWorkflow))]
public async Task<List<Match>> RunOrchestrator(
  [OrchestrationTrigger] IDurableOrchestrationContext orchestrationContext, ILogger logger)
{
  if(CanConnect())
  {
    // Call Activity function and return results
  }
  else
  {
    throw new FunctionException("Exiting since nothing to do!");
  }
}
[FunctionName(nameof(UserHistorySyncWorkflow))]
公共异步任务RunOrchestrator(
[OrchestrationTrigger]IDurableOrchestrationContext orchestrationContext,ILogger记录器)
{
if(CanConnect())
{
//调用活动函数并返回结果
}
其他的
{
抛出新的FunctionException(“由于无事可做而退出!”);
}
}

谢谢,@krishg,但我想把它标记为失败,因为我需要过滤掉这些。因此,抛出异常是目前唯一对meYes有效的方法。那么抛出异常。这没什么错,因为你想标记为失败<代码>抛出新函数异常(“由于无事可做而退出!”)