首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Parallel.ForEachAsync 6在VB.NET中使用.NET 6?

如何使用Parallel.ForEachAsync 6在VB.NET中使用.NET 6?
EN

Stack Overflow用户
提问于 2022-05-28 05:58:59
回答 2查看 109关注 0票数 0

.NET 6介绍了Parallel.ForEachAsync方法,该方法在C#中运行得很好,但我在VB.NET中遇到了使用它的问题。

即,C#中的以下示例:

代码语言:javascript
复制
using HttpClient client = new()
{
    BaseAddress = new Uri("https://api.github.com"),
};
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("DotNet", "6"));
 
ParallelOptions parallelOptions = new()
{
    MaxDegreeOfParallelism = 3
};
 
await Parallel.ForEachAsync(userHandlers, parallelOptions, async (uri, token) =>
{
    var user = await client.GetFromJsonAsync<GitHubUser>(uri, token);
 
    Console.WriteLine($"Name: {user.Name}\nBio: {user.Bio}\n");
});

我想不出如何将本节转换为VB.NET:

代码语言:javascript
复制
await Parallel.ForEachAsync(userHandlers, parallelOptions, async (uri, token) =>
    {
});

我能想到的最符合逻辑的转换是:

代码语言:javascript
复制
Await Parallel.ForEachAsync(userHandlers, parallelOptions, Function(uri, token)
                                                           //stuff
                                                           End Function))

但这不起作用,引发错误BC36532: Nested function does not have a signature that is compatible with delegate 'Func(Of String, cancellationToken, ValueTask)'

我可以理解这个方法需要一个ValueTask,但是我无法想出如何正确地做到这一点。使用Sub而不是Function也不起作用,也不能将其全部包装在Task中。一定有件很蠢的事我错过了。

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2022-05-28 09:29:34

好吧,这是Visual在重启之间一直存在的故障.

我做了以下工作:

代码语言:javascript
复制
Await Parallel.ForEachAsync(Of String)(userHandlers, parallelOptions, New Func(Of String, CancellationToken, ValueTask) _
            (Function(uri, token)

它起了作用,然后我删除了显式的东西,回到下面这个问题上:

代码语言:javascript
复制
 Await Parallel.ForEachAsync(userHandlers, parallelOptions, Function(uri, token)

这正是之前不想工作的确切功能。试图使嵌套函数Async用相同的BC36532错误再次破坏它,但不像以前那样“永久”。很奇怪。

也许VB.NET只是不支持嵌套异步?

票数 1
EN

Stack Overflow用户

发布于 2022-05-28 06:20:06

您没有返回任何内容,因此需要使用Sub而不是函数。VB.Net还有类似于C#的异步匿名方法,但是您必须在它前面使用keywoard Async。尝尝这个

代码语言:javascript
复制
Await Parallel.ForEachAsync(
    userHandlers, 
    parallelOptions, 
    Async Sub(uri, token)
        //stuff
    End Sub))

有关更多信息,请参见异步修饰符

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

https://stackoverflow.com/questions/72413275

复制
相关文章

相似问题

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