gpt4 book ai didi

c# - 这真的是 Async 吗? IEnumerable 扩展

转载 作者:行者123 更新时间:2023-11-30 14:48:45 25 4
gpt4 key购买 nike

public static async Task<T> FirstIfNotNullOrEmptyAsync<T>(this Task<IEnumerable<T>> obj) where T : class
{
var first = await Task.WhenAny(obj);

return first?.Result?.FirstOrDefault() ?? null;
}

这里有另外两种方法来显示完整的

Main Method(在这种情况下将仅返回集合中的项目或集合为空)

private async Task<IEnumerable<T>> fetchRecordsAsync(SqlCommand SqlCommand, bool isSingleRecord)
{..some code...}

这是将获取集合并仅传递 T 的调用者:

protected async Task<T> GetSingleRecord(SqlCommand SqlCommand)
{
return await fetchRecordsAsync(SqlCommand, true).FirstIfNotNullOrEmptyAsync();
}

这是使用 IEnumerable 的异步扩展的正确方法还是它会进行同步?

我真的需要创建另一个任务(首先)吗?

最佳答案

Is this really Async ?

是的。 await Task.WhenAny 将返回第一个完成的任务。在此类任务(已完成的任务)上使用 .Result 不会导致同步等待。

顺便说一句,你不需要使用Task.WhenAny,你的方法可以像这样简化:

public static async Task<T> FirstIfNotNullOrEmptyAsync<T>(
this Task<IEnumerable<T>> obj) where T : class
{
var result = await obj;

return result?.FirstOrDefault();
}

关于c# - 这真的是 Async 吗? IEnumerable<T> 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472426/

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