首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure服务织物可靠藏品的并发安全旋转

Azure服务织物可靠藏品的并发安全旋转
EN

Stack Overflow用户
提问于 2018-05-28 03:00:15
回答 2查看 185关注 0票数 0

我有一个服务,它有一堆传入的订单,我将其存储到一个IReliableDictionary中。随着新订单的到来,我需要在我的程序的整个生命周期中更新和维护这些订单的单独排序列表。

我如何有效地和并发地将IReliableDictionary中的数据转移到一个不同的排序集合中,从而避免死锁,并且不必每次出现新的订单时都从头开始重新构建排序列表?

编辑:在查看了文档之后,我相信我可以通过在提交之前进行更新之后更新本地内存排序集合来实现这一点。

代码语言:javascript
复制
        using (var tx = this.StateManager.CreateTransaction())
        {
            bool addOk = await orderDictionary.TryAddAsync(tx, 123, someOrderToAdd);
            if (addOk)
            {
                this.SortedOrders.Add(someOrderToAdd);
            }
            await tx.CommitAsync();
        }

能否确认我对文档的理解是正确的,并且像上面的实现这样的东西不会导致并发问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-30 09:55:32

可以使用可靠的集合通知并将其存储在排序列表中。这将确保您不会错过与字典相关的事件。

票数 1
EN

Stack Overflow用户

发布于 2018-05-28 06:49:17

如果它只存在于进程的生命周期中,如果只在分区中使用Orders是没有问题的,那么您也许可以使用一个常规的并发集合。对于示例,一个ConcurrentQueue<Order>

您还可以使用事件驱动方法,每次接收到Order时都会发送一个时间戳的Order。然后,您可以在一个单独的服务中订阅这些事件,该服务将它们存储在某个地方。

或者您可以使用像Redis这样的分布式缓存(在容器中)暂时保留Orders

另一种选择可以是将SQL server用于Order数据,而不是使用可靠的集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50558572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档