从异步方法调用 LINQ 查询的 ToList(而不是 ToListAsync)是否存在潜在的死锁?

Eve*_*ent 2 c# deadlock async-await

我遇到了一种情况,需要非异步运行单个LINQ 查询。原因:目前异步 EF 调用加载大 blob 的方式仍然存在错误(有关实体框架异步操作需要十倍时间才能完成的更多信息)

因此,修复上述错误的选择是将查询转换为自定义 DbCommand 并异步运行原始 SQL,或者我可以将调用ToListAsyncToList.

TLDR ---问题: 我知道同步调用异步代码可能会导致死锁(例如query.ToListAsync().Result),但是,在异步方法内部调用 ToList 的非异步版本是否会出现相同的问题?

mm8*_*mm8 5

我知道同步调用异步代码可能会导致死锁(例如query.ToListAsync().Result),但是,调用异步方法内部的非异步版本是否ToList有相同的问题?

调用同步方法ToList()会阻塞当前线程,无论您是否在异步方法内执行此操作。所以它不会死锁,但会阻塞调用方法。而且您不希望异步阻塞。请记住,一个async方法像任何其他方法一样同步运行,直到它遇到await.