我已经AsyncPageable<T>并且只想获得列表中的第一个结果。
MS 文档建议使用await foreach
// call a service method, which returns AsyncPageable<T>
AsyncPageable<SecretProperties> allSecretProperties = client.GetPropertiesOfSecretsAsync();
await foreach (SecretProperties secretProperties in allSecretProperties)
{
Console.WriteLine(secretProperties.Name);
}
Run Code Online (Sandbox Code Playgroud)
有没有什么有效的方法可以只得到第一个结果?就像是FirstOrDefaultAsync()?
目前我正在使用这段代码来获得第一个结果。
var enumerator = response.Value.GetResultsAsync().GetAsyncEnumerator();
await enumerator.MoveNextAsync();
var result = enumerator.Current;
Run Code Online (Sandbox Code Playgroud)
ryt*_*isk 12
由于AsyncPageable<T>实现了IAsyncEnumerable<T>,您可以安装System.Linq.Async nuget 并使用它提供的方法:
var result = await allSecretProperties.FirstOrDefaultAsync();
Run Code Online (Sandbox Code Playgroud)
只需将您拥有的内容包装在扩展方法中即可。
// hrmmm, im not sure
public static async Task<T> FirstOrDefaultAsync<T>(this IAsyncEnumerable<T> enumerable)
{
await foreach (var item in enumerable)
return item;
return default;
}
// This is more efficient
public static async Task<T> FirstOrDefaultAsync2<T>(this IAsyncEnumerable<T> enumerable)
{
var enumerator = enumerable.GetAsyncEnumerator();
await enumerator.MoveNextAsync();
return enumerator.Current;
}
Run Code Online (Sandbox Code Playgroud)