我可以使Linq连接异步吗?

nle07wnf  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(111)

我有下面的linq,我想让它异步以提高性能。这是可能的吗?因为这是一个连接,我想它可能是异步的,因为性能,但我正在使用的命令似乎没有一个异步等效。有一个等效的,为什么没有?

var usersindomain = allUsers
  .Join(allUserStatus, usr => usr.EIN, us => us.EIN, (usr,us) => new { usr,us})
  .Where(result => result.us.DomainID == id)
  .OrderBy(order => order.us.Status)
  .Select (z => new { EIN = z.usr.EIN, FullName = z.usr.FullName, Status = z.us.Status });
eoxn13cs

eoxn13cs1#

如果它的来源是IQueryable<T>,其中allUsers来自EF,那么EF提供了一些自定义扩展API来执行异步查询,如EntityFrameworkQueryableExtensions中所列,包括.ToListAsync()之类的东西。
如果数据已经在内存中,并且您正在使用LINQ-to-Objects,则:不。“异步”和“并行”之间有很大的区别;在本地执行异步操作,如果它是CPU绑定的,而不是在外部资源上被阻塞,那么它几乎没有任何收益。“异步”的意义在于释放那些在外部IO上被阻塞的线程;这里不适用。

ffscu2ro

ffscu2ro2#

正如Marc Gravell提到的,除非涉及到某种io,否则使用“真实的的”异步调用几乎没有意义。
但是,您可以尝试使用支持.Join().AsParallel()。您也可以使用Task.Run在后台线程上运行查询,以将执行从主线程移走,避免阻塞。

相关问题