Mat*_*w H 16 c# async-await windows-runtime
我有以下代码:
            // Get all of the files from the local storage directory.
        var files = await folder.GetFilesAsync();
        // Map each file to a stream corresponding to that file.
        var streams = files.Select(async f => { return await f.OpenStreamForWriteAsync(); });
我希望它是streams类型的,IEnumerable<Stream>但事实上它是IEnumberable<Task<Stream>>,这是我所期望的,如果我省略了await关键字.返回类型OpenStreamForWriteAsync是Task<Stream>- 肯定等待它应该产生一个Stream?
那么,为什么return await语句返回一个Task?
谢谢你的帮助.
Ser*_*rvy 12
所有的async方法都返回要么void,Task或Task<TResult>.lambda只是一个匿名方法,因此仍然适用.它与这个命名方法基本相同:
private static async Task<Stream> Foo(TypeGOesHere f )
{
    return await f.OpenStreamForWriteAsync(); 
}
为了使它返回a,Stream它需要是一个阻塞方法,而不是异步方法:
private static Stream Foo(TypeGOesHere f )
{
    return f.OpenStreamForWriteAsync().Result; 
}
你可能不希望这样.
你可以把你IEnumerable<Task<Stream>>变成一个Task<Stream[]>使用Task.WhenAll是否有帮助你:
Task<Stream[]> resultTask = Task.WhenAll(streams);
| 归档时间: | 
 | 
| 查看次数: | 12172 次 | 
| 最近记录: |