.NET 6介绍了Parallel.ForEachAsync方法,该方法在C#中运行得很好,但我在VB.NET中遇到了使用它的问题。
即,C#中的以下示例:
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:
await Parallel.ForEachAsync(userHandlers, parallelOptions, async (uri, token) =>
{
});我能想到的最符合逻辑的转换是:
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中。一定有件很蠢的事我错过了。
任何帮助都将不胜感激!
发布于 2022-05-28 09:29:34
好吧,这是Visual在重启之间一直存在的故障.
我做了以下工作:
Await Parallel.ForEachAsync(Of String)(userHandlers, parallelOptions, New Func(Of String, CancellationToken, ValueTask) _
(Function(uri, token)它起了作用,然后我删除了显式的东西,回到下面这个问题上:
Await Parallel.ForEachAsync(userHandlers, parallelOptions, Function(uri, token)这正是之前不想工作的确切功能。试图使嵌套函数Async用相同的BC36532错误再次破坏它,但不像以前那样“永久”。很奇怪。
也许VB.NET只是不支持嵌套异步?
发布于 2022-05-28 06:20:06
您没有返回任何内容,因此需要使用Sub而不是函数。VB.Net还有类似于C#的异步匿名方法,但是您必须在它前面使用keywoard Async。尝尝这个
Await Parallel.ForEachAsync(
userHandlers,
parallelOptions,
Async Sub(uri, token)
//stuff
End Sub))有关更多信息,请参见异步修饰符
https://stackoverflow.com/questions/72413275
复制相似问题