客户端或 Web 服务中的并行性?

问题描述 投票:0回答:1

也许你可以在这里帮助我。更重要的是理解。

我有一个可以通过 http://localhost:port/person/200 调用的 Web 服务。 (200 是该人的 ID)。 当我在浏览器中执行此操作时,我会返回一个也显示的 XML。 XML 由大约 30 个元素组成。

我有一个应用程序,在其中使用 HTTPClient 调用 URL 并获取 XML 作为对象。现在我的想法是,由于我最近需要检索 1000 或更多人,因此并行执行调用。到目前为止只有几个人,我已经陆续检索到了不同ID的URL。

foreach (var personId in Class.NameOfTheListWithIDs.Chunk(50))
{
    await CallAMethod(personId, httpClient);
}

为了并行性,我有一个 Foreach 循环,在其中运行一个列表(使用 .Chunk(50))并使用 async/await。

如果我像 Foreach 循环一样在应用程序中这样做,会出现什么危险/问题?我注意到了一个问题,但我还不想提及它,因为我对您的答案感兴趣并且不想超出自己。

以并行性的方式创建 WebService 是否很常见?换句话说,当我从数据库中获取 ID 的数据时,此时是否插入 async/await 或 Task.RUN 或类似的内容?或者我不需要 Web 服务,因为应用程序通过并行性来调节这一点?一切都与网络服务保持同步吗?

谢谢您的回答。

c# web-services async-await foreach parallel-processing
1个回答
0
投票

我的建议是更新您的网络服务以一次接受多人的请求。每个请求都会有一定的开销,这适用于网络服务器和数据库。因此,您通常希望最大程度地减少请求量。您希望将其转换为类似于

SELECT * FROM persons WHERE id IN( id1, id2, ... )

的 SQL

发布的示例是异步的,但不是并行/并发的。对

CallAMethod
的每次调用都将在前一个调用完成其任务后执行。

您可以同时发出多个请求,但扩展将高度依赖于可用资源。在一定程度的并行性下,吞吐量完全有可能下降。如果您想并行进行调用,您可能需要使用类似 Parallel.ForeachAsync 的东西,因为这应该提供一种方便的方法来限制并行量。

Web服务器通常独立并发地处理请求,并使用数据库进行同步。客户端和服务器之间没有自动“同步”,它只是来回传递消息。如果您想确保客户拥有最新的数据,您需要为此构建某种系统。

© www.soinside.com 2019 - 2024. All rights reserved.