Dapr 状态管理
将 Dapr.Client
NuGet 包添加到应用程序:
1 | Dapr.Client |
打开 Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using Dapr.Client; const string storeName = "statestore" ; const string key = "counter" ; var daprClient = new DaprClientBuilder().Build(); var counter = await daprClient.GetStateAsync< int >(storeName, key); while ( true ) { Console.WriteLine($ "Counter = {counter++}" ); await daprClient.SaveStateAsync(storeName, key, counter); await Task.Delay(1000); } |
重要:必须要注意的是,使用状态管理构建块时始终传递显式 app-id
参数。 对于每个键/值对,构建块将应用程序 ID 值用作其状态键的前缀。 如果应用程序 ID 发生了更改,则将无法再访问之前存储的状态。
打开项目所在的目录,运行
1 | dapr run --app-id DaprCounter dotnet run |
后写入优先”策略
1 | var weatherForecast = await daprClient.GetStateAsync<WeatherForecast>( "statestore" , "AMS" ); |
1 | daprClient.SaveStateAsync( "statestore" , "AMS" , weatherForecast); |
乐观并发控制 (OCC) 与“先写入优先”策略一起使用
请首先使用 方法检索当前的 ETag。 然后,写入更新的值,并使用 DaprClient.TrySaveStateAsync
方法传递检索到的 ETag。
1 2 3 4 5 | var (weatherForecast, etag) = await daprClient.GetStateAndETagAsync<WeatherForecast>( "statestore" , city); // ... make some changes to the retrieved weather forecast var result = await daprClient.TrySaveStateAsync( "statestore" , city, weatherForecast, etag); |
检索数据后,数据(以及关联的 ETag)在状态存储中被更改时,DaprClient.TrySaveStateAsync
方法将失败。 该方法返回一个布尔值,以指示调用是否成功。 处理失败的一种策略是,仅需从状态存储重新加载更新后的数据,再次进行更改,然后重新提交更新。
如果始终希望写入成功,而不考虑对数据的其他更改,请使用“后写入优先”策略。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构