NamedPipeServerStream和await关键字

时间:2012-08-21 01:43:03

标签: c# .net-4.5 async-ctp

为Async CTP库v3.0编写的文章C# Named Pipes with Async使用的代码不能用.NET 4.5编译。具体地

await pipe.WaitForConnectionAsync();

var message = await streamReader.ReadToEndAsync();

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

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

1 个答案:

答案 0 :(得分:7)

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

    await Task.Factory.FromAsync(pipe.BeginWaitForConnection,
        pipe.EndWaitForConnection, null);
    StreamReader reader = new StreamReader(pipe);
    await reader.ReadToEndAsync();