我有以下代码:
// 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
is Task<Stream>
- 当然等待它应该会产生一个Stream
?
那么,为什么 return wait 语句返回一个任务呢?
感谢您的帮助。
All async
方法返回void
, Task
, or Task<TResult>
。 lambda 只是一个匿名方法,因此这仍然适用。它本质上与这个命名方法相同:
private static async Task<Stream> Foo(TypeGOesHere f )
{
return await f.OpenStreamForWriteAsync();
}
为了让它返回一个Stream
它需要是一个阻塞方法,而不是一个异步方法:
private static Stream Foo(TypeGOesHere f )
{
return f.OpenStreamForWriteAsync().Result;
}
你可能不想要这样。
你可以把你的IEnumerable<Task<Stream>>
into a Task<Stream[]>
通过使用Task.WhenAll
如果这对您有帮助:
Task<Stream[]> resultTask = Task.WhenAll(streams);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)