2012-03-17 25 views
8

Tôi đang sử dụng NetworkStream.BeginRead để đọc không đồng bộ từ Socket.Có an toàn khi kết nối NetworkStream với BufferedStream để đọc không đồng bộ không?

Nhưng nhanh hơn nhiều nếu bạn thực sự quấn luồng mạng bằng BufferedStream.

Câu hỏi của tôi: NetworkStream.BeginRead gọi nội bộ tới Socket.BeginReceive và toàn bộ chồng IO không đồng bộ (CompletionPorts trên Windows vv ..). Điều tương tự có xảy ra khi BufferedStream ở giữa không?

+0

Có điều gì có thể nhìn thấy/dễ hiểu từ Reflector không? – remio

+0

Nó không thực hiện các cuộc gọi async (BufferedStream) vì vậy tôi không chắc chắn bằng cách nào đó nó sẽ đi đến NetworkStream hoặc Stream cơ sở, có thể làm async, nhưng afaik không sử dụng IOCP – pablo

Trả lời

2

BufferedStream không hỗ trợ IO không đồng bộ hiệu quả. Nó sử dụng cài đặt mặc định được kế thừa từ lớp Stream. Nó sẽ phát hành các IO đồng bộ trên thread-pool. Vì vậy, bạn sẽ không nhận được cổng hoàn thành IO làm điều đó. Bạn cần tự mình làm việc này. Nếu bạn đang sử dụng C# 5, bạn gần như có thể sử dụng lại việc thực hiện BufferedStream và cố gắng slap async và đang chờ nó.

+0

Điều này là gì? Nhìn vào các nguồn BufferedStream có vẻ như các hoạt động không đồng bộ được triển khai đúng cách bằng cách gọi các hoạt động không đồng bộ trên luồng cơ bản? –

+0

Nó dựa trên .NET 4.0. Ngày 4.5 điều này không còn đúng nữa. Điểm tốt. – usr

+0

Ah, cảm ơn vì đã làm rõ. –

Các vấn đề liên quan