是否有同时处理 TPL 和 Asynch/Await 的代码或框架?

Is there code or framework to simultaneously handle TPL and Asynch/Await?

在我的场景中,我有一个控制台程序,它将 运行 同时查询 600-800 个生产数据库。 运行 所在的机器有 16 个核心,可以通过 TPL 同时使用。我还如何通过使用异步等待技术来提高性能。 600-800 个数据库分布在 30 台不同的服务器上,因此理想情况下,我希望同时进行尽可能多的查询。在处理过程中,我预计每个内核的利用率 运行 在 70-90% 之间。我可以使用 async-await 获取这些利用率数字。我可以使用 TPL 进行 16 核处理。我不确定如何结合这两种技术来实现最大吞吐量。

使用 TPL 数据流。 TPL async-ready actor 库。

您只需要创建一个 ActionBlock 并设置它的并行度,最好是通过一个您可以在生产中调整的配置文件。 CPU 密集型工作应该限制在核心数左右。 I/O 密集工作的限制可能要高得多。您需要了解什么最适合您的特定场景。

您定义一个动作,它也可以是异步的,并且 post 项目到 运行 对它们的动作。这些项目可以是委托或命令对象,例如:

var block = new ActionBlock<Command>(
    command => command.ExecuteAsync(),
    new ExecutionDataflowBlockOptions {MaxDegreeOfParallelism = 1000});

foreach (var command in GenerateCommands())
{
    block.Post(command);
}

block.Complete();
await block.Completion;