【发布时间】:2018-07-26 16:48:06
【问题描述】:
我有一个简单的持久函数,我的目标是执行一些后台工作(在这种情况下启动 Azure 数据库)。
我有以下代码正在运行,但是我想知道需要 ActivityTrigger 函数的目的是什么。
如果我不包含它并尝试在 CreateDB 本身中工作,则持久功能永远不会正确完成并保持运行状态。
public static class CreateDBFn
{
private const string CreateDBConstant = "CreateDB";
private const string CreateDBTaskConstant = CreateDBConstant + "Task";
[FunctionName(CreateDBConstant + "Start")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = CreateDBConstant + "/{Name}")] HttpRequestMessage req,
[OrchestrationClient] DurableOrchestrationClientBase starter,
string Name,
ILogger log)
{
string instanceId = await starter.StartNewAsync(CreateDBConstant, Name);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var res = starter.CreateCheckStatusResponse(req, instanceId);
res.Headers.RetryAfter = new RetryConditionHeaderValue(TimeSpan.FromSeconds(10));
return res;
}
[FunctionName(CreateDBConstant)]
public static async Task<bool> CreateDB([OrchestrationTrigger] DurableOrchestrationContextBase context)
{
var Name = context.GetInput<string>();
// I'd like to just do work here
await Task.Delay(30000);
// Why is it required to call out to an Activity?
var success = await context.CallActivityAsync<bool>(CreateDBTaskConstant, Name);
return true;
}
[FunctionName(CreateDBTaskConstant)]
public static async Task<bool> CreateDBTask([ActivityTrigger] string Name)
{
// preform work
await Task.Delay(30000);
return true;
}
}
【问题讨论】:
标签: azure-functions