3

文章C# Named Pipes with Async是为 Async CTP 库 v3.0 编写的,它使用的代码不能与 .NET 4.5 一起编译。具体来说

await pipe.WaitForConnectionAsync();

var message = await streamReader.ReadToEndAsync();

失败,因为没有NamedPipeClientStream这样的方法。

CTP 和 .NET 4.5 中的包含在这方面有什么变化吗?我错过了完成这项工作的步骤吗?

4

1 回答 1

8

Async CTP 中实现的*Async方法是临时扩展方法(即它们是未添加到所涉及的实际类的扩展方法)。RTM 将这些Async方法“移动”到适用类的实例方法中。我认为“移动”并不像复制扩展方法那么容易,并且涉及到一些工作/测试/验收。我收集到有些人由于各种原因无法被感动。 NamedPipeServerStream.WaitForConnectionAsync似乎是其中一种方法。您必须使用该TaskFactory.FromAsync方法创建一个TaskBeginWaitForConnection/EndWaitForConnection对到awaiton 的对象。就像是:

    await Task.Factory.FromAsync(pipe.BeginWaitForConnection,
        pipe.EndWaitForConnection, null);
    StreamReader reader = new StreamReader(pipe);
    await reader.ReadToEndAsync();
于 2012-08-21T02:47:05.800 回答