gpt4 book ai didi

c# - 使用 ASP.NET async/await 进行线程管理

转载 作者:行者123 更新时间:2023-11-30 20:46:26 25 4
gpt4 key购买 nike

我有一个数据库实体类型Entity,一长串Thingy和方法

private Task<Entity> MakeEntity(Thingy thingy) {
...
}

MakeEntity 会做很多事情,并且受 CPU 限制。我想将我所有的东西转换为实体,并将它们保存在 db.context 中。考虑到这一点

  • 我不想尽快完成
  • 实体量大,想有效使用数据库,所以想开始保存修改,等待远程数据库做这件事

我怎样才能高效地做到这一点?我真正想要的是在等待数据库执行它的操作时循环,并提供到目前为止所有新创建的实体,直到数据库处理完所有实体。那里最好的路线是什么?如果同时调用它,我会遇到 saveChanges 抛出,所以我不能那样做。我真正想要的是拥有一个包含八个线程(或者更确切地说,与我拥有的内核一样多的线程)的线程池来执行 CPU 绑定(bind)工作,以及一个执行 SaveChanges()

最佳答案

这是一种“异步流”,总觉得有点别扭。

在这种情况下(假设您确实确实想要在 ASP.NET 上使用多线程,通常不推荐这样做),我会说 TPL Dataflow是你最好的选择。您可以将 TransformBlockMaxDegreeOfParallelism set to 8 (or unbounded, for that matter) 一起使用,并将其链接到执行 SaveChangesActionBlock

请记住,对 CPU 绑定(bind)代码使用同步签名(不是 async/await),对 I/O 绑定(bind)代码使用异步方法(即 SaveChangesAsync).

关于c# - 使用 ASP.NET async/await 进行线程管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com