我试图将stream-parameter传递给异步方法,如下所示:
async void MyAsyncMethod(Stream s, int i)
{
await Task.Factory.StartNew(() =>
{
SomeMethodReadingFromStream(s, i); // throws ArgumentException, "Stream was not readable."
});
}
当我使MyAsyncMethod不使用async-await时,一切正常。
有没有办法在异步方法中使用流?
答案 0 :(得分:8)
调用方法可能如下所示:
using(var stream = ...)
{
MyAsyncMethod(stream, 3);
}
由于您开始关注MyAsyncMethod
然后关闭流,因此当MyAsyncMethod
运行时,流将会关闭。
解决此问题的一种方法是更改MyAsyncMethod
签名以返回任务,然后等待它。
async Task MyAsyncMethod(Stream s, int i) { ... }
using(var stream = ...)
{
await MyAsyncMethod(stream, 3);
}
这样,在MyAsyncMethod
完成之前,流不会被关闭。