我正在将一些同步代码转换为C#(.NET 4.5)中的异步代码。我有一个问题,需要使用远程查询检索到的模型数量作为输入来进行操作。
所需行为的示例:
public async Task<List<Model>> GetEntityModelsAsync()
{
return // some models from a database async
}
public async Task<int> DoSomeWorkWithModelCount()
{
Task<IEnumerable<Model>> models = GetEntityModelsAsync();
// some other code to execute before awaiting
int count = await models.Count();
// do more work and return result
}
以上代码将不会编译为错误“ Task
我认为这是因为变量的类型是'Task
我尝试以这种方式获得结果:
int count = await models.Result.Count(); // error: 'int' does not contain a definition for 'GetAwaiter'
await recentApplications.GetAwaiter().GetResult(); // error: 'int' does not contain a definition for 'GetAwaiter'
我被迫首先等待结果进入另一个这样的变量:
IEnumerable<Model> modelsResult = await models;
int count = modelsResult.Count();
还是有一种更简化的方法来对等待的任务的结果执行类型操作?
答案 0 :(得分:3)
如果要在一行中执行此操作,则该操作:
int count = (await models).Count();
答案 1 :(得分:1)
使用
int count = await models.CountAsync();