将Stream传递给异步方法

War*_*ker 0 c# asynchronous stream async-await

我正在尝试将stream-parameter传递给异步方法,如下所示:

async void MyAsyncMethod(Stream s, int i)
{
    await Task.Factory.StartNew(() =>
        {
            SomeMethodReadingFromStream(s, i); // throws ArgumentException, "Stream was not readable."
        });
}
Run Code Online (Sandbox Code Playgroud)

当我使MyAsyncMethod不使用async-await时,一切正常.

有没有办法在异步方法中使用流?

dca*_*tro 8

调用方法可能如下所示:

using(var stream = ...)
{
    MyAsyncMethod(stream, 3);
}
Run Code Online (Sandbox Code Playgroud)

由于您正在开始关闭MyAsyncMethod然后关闭流,因此在MyAsyncMethod运行时,流将被关闭.

解决此问题的一种方法是更改MyAsyncMethod签名以返回任务,然后等待它.

async Task MyAsyncMethod(Stream s, int i) { ... }

using(var stream = ...)
{
    await MyAsyncMethod(stream, 3);
}
Run Code Online (Sandbox Code Playgroud)

这样,直到MyAsyncMethod完成才会关闭流.