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;
}
以下是另外两种显示完整内容的方法:
主要方法(在这种情况下,将仅返回集合中的一个项目或一个空集合)
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的异步扩展的正确方式吗?还是它会执行同步操作?
我真的需要创建另一个任务(首先)吗?
Task<IEnumerable<T>>
? - M.kazem Akhgaryreturn (await obj)?.FirstOrDefault();
呢? - Yacoub Massad