我正在使用 MS Graph API 将数百万用户从本地 AD 迁移到 Azure AD B2C,以在 B2C 中创建用户。我编写了一个 .Net Core 3.1 控制台应用程序来执行此迁移。为了加快速度,我正在对 Graph API 进行并发调用。这很好用 - 有点。
在开发过程中,我从 Visual Studio 2019 运行时体验到了可接受的性能,但为了测试,我从 Powershell 7 的命令行运行。从 Powershell 并发调用 HttpClient 的性能非常差。从 Powershell 运行时,HttpClient 允许的并发调用数似乎存在限制,因此并发批处理中大于 40 到 50 个请求的调用开始堆积。它似乎正在运行 40 到 50 个并发请求,同时阻止其余请求。
我不是在寻求异步编程方面的帮助。我正在寻找一种方法来解决 Visual Studio 运行时行为和 Powershell 命令行运行时行为之间的差异。从 Visual Studio 的绿色箭头按钮在发布模式下运行的行为与预期一致。从命令行运行不会。
我用异步调用填充任务列表,然后等待 Task.WhenAll(tasks)。每次调用需要 300 到 400 毫秒。从 Visual Studio 运行时,它按预期工作。我同时进行 1000 次调用,每个调用都在预期时间内单独完成。整个任务块只比最长的单个调用长几毫秒。
当我从 Powershell 命令行运行相同的构建时,行为会发生变化。前 40 到 50 次调用预计需要 300 到 400 毫秒,但随后各个调用时间会增加到每次 20 秒。我认为调用是序列化的,所以一次只执行 40 到 50 …