NReco phantomjs 运行 脚本与输入和输出流异步

NReco phantomjs run script async with input and output streams

我目前正在使用 NReco phantomjs 包装器,一切正常。我调用现有的 JavaScript 文件并使用流传递数据和输出流来获取结果,然后我可以将结果转换为 PNG 并将其插入到文档中。

代码看起来有点像:

using (var inputStream = new MemoryStream(Encoding.UTF8.GetBytes(serialisedJsonData + "\n")))
using (var outputStream = new MemoryStream())
{
       var phantomJS = new PhantomJS();
       phantomJS.Run("javascriptfile.js", null, inputStream, outputStream);

       ...
}

理想情况下,我想调用异步的 运行 方法,但我似乎没有办法对输入和输出流执行此操作(仅使用脚本文件名和参数)。

我是不是遗漏了什么或者这不可能?

由于 outputStream,这组参数没有 "RunAsync" 方法:在这种情况下,包装器重定向 phantomjs 的标准输出,并将输出复制到指定的 Stream。这是由以下代码执行的:

    private void ReadStdOutToStream(Process proc, Stream outputStream) {
        var buf = new byte[32 * 1024];
        int read;
        while ((read = proc.StandardOutput.BaseStream.Read(buf, 0, buf.Length))>0) {
            outputStream.Write(buf, 0, read);
        }
    }

并且这个方法是在Run里面执行的。可以添加使用 Stream.ReadAsyncReadStdOutToStream 的异步版本,但当前包装器具有 net40 目标并且此方法不可用。也许是时候改用 net45 了,在这种情况下,如果确实需要,可以为流添加 RunAsync