我可以将任务添加到任务中吗?

时间:2014-07-21 17:18:25

标签: c# concurrency task-parallel-library task async-await

我看到了这段代码:

[HttpGet]  
public async Task OperationAsync()  
{   
    await Task.Delay(2000);  
}

...在#7 here提示中,我想我会尝试一下。我改变了这段代码:

[HttpGet]
[Route("api/Deliveries/Count")]
public int GetCountOfDeliveryRecords()
{
    return NRBQService.GetNRBQEntity(); 
}

......对此:

// [HttpGet] unnecessary when method name begins with "Get"
[Route("api/Deliveries/Count")] 
public async Task<int> GetCountOfDeliveryRecords()
{
    return await Task.NRBQService.GetNRBQEntity();
}

...但是得到,“'System.Threading.Tasks.Task'不包含NRBQService的定义'

那么我应该怎么做才能让它编译/工作?

1 个答案:

答案 0 :(得分:4)

您只能等待TaskTask<T>(也可等待其他等待,但您不太可能需要使用其中一个)。 Task.Delay是一个返回Task的异步方法。这允许你写:

await Task.Delay(2000);

NRBQService.GetNRBQEntity是一种返回int的方法,因此无法等待。您需要创建一个返回Task<int>的异步方法,如下所示:

public async Task<int> NRBQService.GetNRBQEntityAsync()
{
    // ...
}

你可以这样使用它:

[Route("api/Deliveries/Count")] 
public async Task<int> GetCountOfDeliveryRecords()
{
    return await NRBQService.GetNRBQEntity();
}