Nul*_*sis 4 c# asp.net async-await
我有一个场景,我的服务类与API通信并填充列表.这个方法是
public async Task<List<T>> Foo()
Run Code Online (Sandbox Code Playgroud)
在这个方法中,我正在做一个异步等待从API检索数据并反序列化到列表.
问题是,我想做这样的事情:
if (list is cached in memory)
//serve data from the in memory list
else
//await get data from the API
Run Code Online (Sandbox Code Playgroud)
但是if语句的第一部分中List<T>的返回类型是第二部分的返回类型Task<List<T>>
我怎样才能做到这一点?我可以将我的内存列表作为任务吗?(也许我可以将List包装在一个任务中)?
谢谢你们!
我不打算进入技术细节在这里,但想想await作为一个展开Task<T>成T和async包装纸其返回值的方法T进入Task<T>.
所以如果你的方法签名就像你问的那样
public async Task<List<T>> Foo()
Run Code Online (Sandbox Code Playgroud)
那么您的返回值与您的评论不同:
GetDataFromApi(); // results in Task<List<T>>
await GetDataFromApi(); // results in List<T>
Run Code Online (Sandbox Code Playgroud)
所以无论如何,return一个async Task<List<T>>期望的声明,List<T>而不是Task<List<T>>
public async Task<List<T>> Foo()
{
if (list is cached in memory)
return list; //serve data from the in memory list
else
return await GetDataFromApi(); //await get data from the API
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用async await,则可以将结果包装在已完成的任务中:
public Task<List<T>> Foo()
{
if (list is cached in memory)
return Task.FromResult(list); //serve data from the in memory list
else
return GetDataFromApi(); //await get data from the API
}
Run Code Online (Sandbox Code Playgroud)
请注意这两个,async并await在第二个示例中删除.
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |