Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#异步方法结果上执行操作_C#_.net_Async Await - Fatal编程技术网

在C#异步方法结果上执行操作

在C#异步方法结果上执行操作,c#,.net,async-await,C#,.net,Async Await,我正在致力于将C#(.NET4.5)中的一些同步代码转换为异步代码。我有一个senario,需要使用远程查询检索到的模型数量作为输入来执行操作 所需行为的示例: public async Task<List<Model>> GetEntityModelsAsync() { return // some models from a database async } public async Task<int> DoSomeWorkWithModelCo

我正在致力于将C#(.NET4.5)中的一些同步代码转换为异步代码。我有一个senario,需要使用远程查询检索到的模型数量作为输入来执行操作

所需行为的示例:

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
}
我是否必须首先等待另一个变量的结果,如下所示:

IEnumerable<Model> modelsResult = await models;
int count = modelsResult.Count();
IEnumerable modelsResult=wait models;
int count=modelsResult.count();

或者,是否有一种更为简化的方法来对等待的任务的结果执行类型操作?

如果您希望将其放在一行中,您可以这样做:

int count = (await models).Count();
使用


为什么不等待调用
getEntityModelAsync
或使用
任务。何时调用?您还可以使用parens获得正确的操作顺序最后一个选项是正确的。任务返回一个IEnumerable,然后您可以在此基础上计算()。如果您只关心计数,请更改async方法以返回任务,并在那里进行计数。您不必创建单独的变量。您可以执行
(等待模型).Count()
甚至
(等待GetEntityModelAsync()).Count()
。这取决于你是否需要在某些方面与他们合作,而不仅仅是抓住机会。关键部分是在获得计数之前展开任务。
int count = (await models).Count();
int count = await models.CountAsync();