为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中包含这方面有什么变化吗?我错过了让这项工作成功的一步吗?
答案 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();