小编Gho*_*ter的帖子

将列表拆分为多个部分 - VB转换失败

尝试编写一个将列表拆分为子列表的方法.

Private Function SplitIdsIntoChunks(ByVal keys As List(Of String)) As List(Of List(Of String))
    Return keys _
        .Select(Function(x, i) New With {Key .Index = i, Key .Value = x}) _
        .GroupBy(Function(x) (x.Index / 10000)) _
        .Select(Function(x) x.Select(Function(v) v.Value).ToList()) _
        .ToList()
End Function
Run Code Online (Sandbox Code Playgroud)

我从这里使用了C#解决方案.C#解决方案工作正常.

我用VB编写的版本返回一个列表的集合,其中包含一个元素而不是10000.我哪里出错了?

提前致谢.

编辑1:

用法:

Dim chunks As List(Of List(Of String)) = SplitIdsIntoChunks(keys)
Run Code Online (Sandbox Code Playgroud)

'钥匙'内容:

在此输入图像描述

我的方法返回一个列表,其中包含一个项目:

在此输入图像描述

预期结果:两个列表的列表 - 首先是10000个项目,第二个是6256个.

.net vb.net c#-to-vb.net

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

从结构变为类是否安全

我们的结构在整个应用中被广泛使用(超过一百次).结构变得太复杂了,我正在考虑将它改造成课堂.

从结构迁移到类是否安全?

这只是关于存储对象的位置(堆栈或堆)还是应用程序行为可能被破坏?

.net vb.net

3
推荐指数
1
解决办法
78
查看次数

Task.Wait不等待异步方法完成

这是代码:

static async Task Main(string[] args)
{
    var t = new Task(async () => await AsyncTest());
    t.Start();
    t.Wait();
    Console.WriteLine("Main finished");
}

private static async Task AsyncTest()
{
    Thread.Sleep(2000);
    await Task.Delay(2000);
    Console.WriteLine("Method finished");
}
Run Code Online (Sandbox Code Playgroud)

我的期望是t.Wait()实际上将等待AsyncTest方法完成,并且输出将是:

Method finished 
Main finished
Run Code Online (Sandbox Code Playgroud)

实际上输出只有Main finished。当您await Task.Delay(2000)在AsyncTest内部点击时,Wait()即完成。如果t.Wait()await t/ await Task.WhenAll(t)/ 替换,也会发生同样的情况Task.WaitAll(t)

解决方案是将方法重写为同步实现,或者直接在AsyncTest()上调用Wait()。但是,问题是为什么它以这种奇怪的方式起作用?

PS这是代码的简化版本。我试图实现延迟的任务执行。实际上,Task对象是由程序的一个部分创建的,然后在某些特定条件之后由另一部分执行。

UPD:重写VAR t = new Task(async () => await AsyncTest())var t = new Task(()=> AsyncTest().Wait())还解决了问题。虽然我仍然不太明白为什么Task无法在委托中使用async / …

.net c# asynchronous

2
推荐指数
1
解决办法
146
查看次数

标签 统计

.net ×3

vb.net ×2

asynchronous ×1

c# ×1

c#-to-vb.net ×1