问题标签 [linq-async]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
320 浏览

c# - 最终锁定后,代码未在 IAsyncEnumerable 迭代器中执行

我在枚举IAsyncEnumerable, 并附加了System.Linq.Async运算符时遇到了一个奇怪的问题。Take在我的迭代器中,我有一个 try-finally 块,块内产生了一些值,try块内有一些清理代码finally。清理代码位于lock块内。问题是块后面的任何代码lock都不会执行。没有抛出异常,只是忽略了代码,就像它不存在一样。这是一个重现此行为的程序:

输出:

控制台中未打印文本“Finally after lock” !

这只发生在Take连接了操作员的情况下。如果没有操作符,文本将按预期打印。

这是System.Linq.Async库中的错误、C# 编译器中的错误还是其他什么?

作为一种解决方法,我目前在 内部使用嵌套的 try-finally 块finally,它可以工作但很尴尬:

.NET Core 3.1.3、.NET Framework 4.8.4150.0、C# 8、System.Linq.Async 4.1.1、Visual Studio 16.5.4、控制台应用程序

0 投票
0 回答
31 浏览

asynchronous - 在 EntityFrameworkCore 5 中使用异步 Linq 中的表达式

我正在使用 EntityFramework 核心和 .net 核心 3.1。目前我遇到的情况是,我想在以下查询的 Linq where 子句中使用表达式。我创建如下,

并将其分配给表达式变量

并在下面的查询中使用它。我需要加入两个实体,但 entity1 记录应该在加入之前使用某些条件进行过滤,这就是用 Func 编写的内容并创建了一个表达式变量。

现在的问题是当我使用表达式 (ValidNameXpression) 时,我得到的 IEnumerable 不包含 ToListAsync() 的定义。但是当我用实际的 contition (x => !string.IsNullOrEmpty(x.Name) && x.Name.ToLower() != "none") 直接替换表达式时它可以工作!

我不明白,你能帮我为什么会出现这种行为,我该如何解决?

注意:接收到 Requiremtn 以使用函数/表达式为 where 子句中使用的过滤逻辑提供有意义的名称。