Ayb*_*ybe 2 c# linq task-parallel-library async-await
我希望以下语句返回一个IEnumerable的String.
IEnumerable<Task<string>> @select = artist.Reviews.Select(async s => await DownloadFile(s.ImageUrl,1000));
Run Code Online (Sandbox Code Playgroud)
在DownloadFile前添加await并没有改变任何东西.
被调用方法的签名:
private static async Task<string> DownloadFile(string url, int timeout)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
首先,了解您的类型.这将引导您找到正确的解决方案.我假设你熟悉IEnumerable<T>(一系列事物); 但Task<T>对许多人来说是新的.A Task<T>是未来 - 某些操作将来会有类型的结果T.
如果你有IEnumerable<Task<string>>(字面意思是一系列期货会产生字符串结果),并且你想要IEnumerable<string>(字面意思是一系列字符串),那么你想要做的是(异步地)等待所有期货完成.
您可以(异步)使用Task.WhenAll以下方法等待多个期货:
IEnumerable<Task<string>> @select = artist.Reviews.Select(s => DownloadFile(s.ImageUrl,1000));
string[] results = await Task.WhenAll(@select);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |