gpt4 book ai didi

azure-service-fabric - 搜索 IReliableDictionary 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 22:03:44 25 4
gpt4 key购买 nike

基于这些帖子:

Convert IReliableDictionary to IList

What is the most optimal method of querying a reliable dictionary collection

我应该能够使用 Linq 来查询 IReliableDictionary,但看起来这个接口(interface)不再实现 IEnumerable 并且 Linq 扩展不可用。至少在 Microsoft.ServiceFabric.Data.Interfaces 程序集的版本 5.0.0.0 中。

如果这是真的,那么搜索 IReliableDictionary 的最佳方法是什么?

最佳答案

是的,我们确实在 GA 版本中从 Reliable Collections 中删除了 IEnumerable。正如 Allan T 所提到的,Reliable Collections 与常规的 .NET 集合并不完全相同,尽管它们代表相同的基本数据结构。您可能已经注意到的最大差异之一是所有操作都是异步的,因为锁定语义以及用于复制和磁盘读取的 I/O。插入移除 IEnumerable 的决定是后者,因为它是严格同步的,而我们不是。相反,我们现在使用 IAsyncEnumerable,它目前还不支持完整的 LINQ 扩展方法集。

我们正在研究异步 LINQ 扩展方法,但与此同时,有几种方法可以使用 IAsyncEnumerable。

Eli Arbel has async extension methods on Gist提供了通往 System.Interactive.Async 的桥梁以及 Select、SelectMany 和 Where 的异步实现。

或者你可以wrap IAsyncEnumerable in a regular IEnumerable它只是用同步方法包装异步调用,这将再次为您提供全套 LINQ 扩展方法。然后您可以在常规 LINQ 查询中使用扩展方法:

        using (ITransaction tx = this.StateManager.CreateTransaction())
{
var x = from item in (await clusterDictionary.CreateEnumerableAsync(tx)).ToEnumerable()
where item.Value.Status == ClusterStatus.Ready
orderby item.Value.CreatedOn descending
select new ClusterView(
item.Key,
item.Value.AppCount,
item.Value.ServiceCount,
item.Value.Users.Count(),
this.config.MaximumUsersPerCluster,
this.config.MaximumClusterUptime - (DateTimeOffset.UtcNow - item.Value.CreatedOn.ToUniversalTime()));

}

关于azure-service-fabric - 搜索 IReliableDictionary 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com