小编Jus*_*ley的帖子

C# 8 使用声明范围混淆

使用新的 C# 8 Using Declaration Syntax,包含第二个连续 using 语句的范围是什么?

TL; 博士

在 C# 8 之前,有一个连续的 using 语句,如:

using(var disposable = new MemoryStream())
{
    using(var secondDisposable = new StreamWriter(disposable))
    {}
}
Run Code Online (Sandbox Code Playgroud)

将扩展为以下内容(我的来源):

MemoryStream disposable = new MemoryStream();
try {
    {
        StreamWriter secondDisposable = new StreamWriter(disposable);    
        try{
            {}
        }
        finally {
            if(secondDisposable != null) ((IDisposable)secondDisposable).Dispose();
        }
    }
}
finally {
    if(disposable != null) ((IDisposable)disposable).Dispose();
}
Run Code Online (Sandbox Code Playgroud)

我知道还有另外两个可能的扩展,但它们都大致是这样的

升级到 C# 8 后,Visual Studio 提供了一个代码清理建议,我不确定我认为这是一个等效的建议。

它将上面的连续 using 语句转换为:

using var disposable = new MemoryStream(); …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio c#-8.0 visual-studio-2019

11
推荐指数
1
解决办法
1120
查看次数

Service Fabric ReliableCollections 中是否有既定的分页模式

在可靠的集合(特别是 IReliableDictionary)中,实现“常见”查询的一种方法是更新辅助字典,该字典构造要在枚举中以特定方式排序的键。对于大型数据集,我希望避免在.

为了实现这一点,我想实现某种延续令牌,调用者可以在请求数据时提供给我。我目前正在通过首先生成有序枚举并返回前 n 个项目来实现这一点,其中 n = MAX_PAGE 大小。 延续本质上是该 n 项列表中的最后一个键。下次调用者传入 continuation 标记时,我会生成有序的枚举,并使用过滤器函数指定键应大于 continuation

这有两个问题(我可以看到):

  1. 集合可以当主叫用户第一次请求一个页面,后续请求之间变化。我不确定我是否可以避免,因为无论谁试图翻阅数据,都需要能够随时更新集合。
  2. 我不确定如何使用过滤器功能。我认为由于开发人员可以过滤任何内容,因此GetEnumerableAsync() 方法必须在返回 enumerable 之前提供字典中的所有键。对于足够大的数据集,这似乎很慢。

是否有任何规定的方法来分页数据? 我开始觉得对于我的一些用例,我可能会用 Reliable Collections 挑错树。

azure microservices azure-service-fabric service-fabric-stateful

4
推荐指数
1
解决办法
692
查看次数