gpt4 book ai didi

c# - 我将如何编写自己的FirstOrDefaultAsync()方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:17 26 4
gpt4 key购买 nike

我开始着手处理异步/等待编程模型,并试图了解这些模式以及如何使用它们。

给定我有一个返回Task<List<string>> GetListAsync()的方法

我如何像这样编写自己的FirstOrDefault()方法

Task<string> result = GetListAsync().FirstOrDefaultAsync();


这感觉不对:

 var resultList = await GetListAsync();
var firstElementTask = Task.FromResult(resultList.FirstOrDefault());


我不破坏异步/等待编程模型的有效方法是什么?

最佳答案

当您的方法返回Task<List<string>>时,创建FirstOrDefaultAsync并没有多大意义。您当然可以,但是并没有太大帮助。

因为在任务完成之前您无法获得List<string>。任务完成后,您将剩下内存集中的List<string>。它具有您需要的所有元素。此时,您可以只调用yourList.FirstOrDefault()

另一方面,当您具有FirstOrDefaultAsyncList<Task<string>>时,创建IEnumerable<Task<string>>是有意义的。

public async Task<T> FirstOrDefaultAsync<T>(IEnumerable<Task<T>> tasks)
{
var first = await Task.WhenAny(tasks);
return await first;
}


正如@ i3arnon在注释中指出的那样,该方法将返回任务的结果,以先完成的为准。不是列表中的第一个。

关于c# - 我将如何编写自己的FirstOrDefaultAsync()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28602019/

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