【问题标题】:Waiting for durable entity value to change等待持久实体值改变
【发布时间】:2020-10-19 13:06:15
【问题描述】:
[FunctionName("SetDurable")]
public static async Task<HttpResponseMessage> SetDurable(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "SetDurable/{durable}")] HttpRequestMessage req,
        [DurableClient] IDurableEntityClient client,
        string durable)
        {
           var entityId = new EntityId(DurableEntitiesNames.BirSessionIdentificatorEntity, DurableEntitiesNames.BirSessionIdentificatorKey);
           await client.SignalEntityAsync<IBirSessionIdentificator>(entityId, identificator => identificator.Set(durable) );
           //await Task.Delay(2000);
           EntityStateResponse<JObject> stateResponse = await client.ReadEntityStateAsync<JObject>(entityId);
           var setResult = stateResponse.EntityState.ToObject<BirSessionIdentificatorResult>().Sid;
           return new HttpResponseMessage(HttpStatusCode.OK){Content = new StringContent($"{setResult}")};
    }
    

在 Azure Functions v3 中,当我尝试设置持久实体的值并立即尝试读取此值时,它返回旧值而不是新值。 但是,当我取消注释 Task.Delay 并在设置持久实体的值后让它等待 2 秒时,我在尝试读取它时得到了正确的值。

有没有办法等待持久实体值设置操作完成?

【问题讨论】:

  • 您好,刚刚检查一下,我的回答对您有帮助吗?如果是这样,请mark it as answer 或随时要求澄清。

标签: c# azure azure-functions azure-durable-functions


【解决方案1】:

有没有办法等待持久实体值设置操作完成?

不,至少在使用SignalEntityAsync 时不会。见the docs

重要的是要了解从客户端发送的“信号”只是简单地排队,以便稍后异步处理。特别是SignalEntityAsync通常在实体开始操作之前就返回了,不可能取回返回值或观察异常。 如果需要更强的保证(例如工作流),应该使用编排函数,它可以等待实体操作完成,并且可以处理返回值并观察异常。

粗体部分是您的出路:您可以使用编排中的proxy 来访问持久实体。这样你就可以等待操作了。一个例子:

[FunctionName("DeleteCounter")]
public static async Task<HttpResponseMessage> DeleteCounter(
    [HttpTrigger(AuthorizationLevel.Function, "delete", Route = "Counter/{entityKey}")] HttpRequestMessage req,
    [DurableClient] IDurableEntityClient client,
    string entityKey)
{
    var entityId = new EntityId("Counter", entityKey);
    await client.SignalEntityAsync<ICounter>(entityId, proxy => proxy.Delete());    
    return req.CreateResponse(HttpStatusCode.Accepted);
}

这里我们等待实体上 Delete 方法的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2018-07-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多