我正在编写一段使用 .FirstOrDefaultAsync()
LINQ
方法的代码。我知道通常如果你在一个表达式中使用它,使用 none async 方法,然后使用 ?
返回而不评估其余的方法调用。
例。 Suedo 代码
class Item = {
string Name
string Value
}
items = Item[]
var result = items.FirstOrDefault(item => item.Name == "Item One")?.Value;
如果 list
不包含名为“Item One”的 item
,则结果将为 null
和一个 exception
不会被抛出,因为 null
没有属性 Value
。
我想异步执行相同的操作,这行得通吗:
list.FirstOrDefaultAsync(item => item.Name == "Item One")?
.ContinueWith(result => result.Result.Value);
如果没有找到这样的项目,这是否会在不评估 ContinueWith()
的情况下直接返回?还是 ?
不能以这种方式异步工作?
最佳答案
您显示的代码将不起作用,因为它正在检查 FirstOrDefaultAsync
返回的 Task
是否为 null - 它永远不会。此外,ContinueWith
过度扩展,因为它的主要用途是链接异步操作。提取值不是异步的,所以为什么不呢
var item = await list.FirstOrDefaultAsync(item => item.Name == "Item One");
var result = item?.Value;
如果你愿意,你可以单行
var result = (await list.FirstOrDefaultAsync(item => item.Name == "Item One"))?.Value;
关于c# - 如果结果为空,IEnumerable.FirstOrDefaultAsync( predicate )?.ContinueWith() 是否返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901455/