2015-09-29 26 views
6

Có một loạt các phương pháp khá thuận tiện trong lớp học File, như ReadAll***/WriteAll***/AppendAll***.Trường hợp là FIle.ReadAll *** Async/WriteAll *** Async/AppendAll *** Các phương thức không đồng bộ?

Tôi gặp phải một số trường hợp, khi tôi cần các đối tác không đồng bộ của chúng, nhưng chúng không tồn tại.

Tại sao? Có bất kỳ cạm bẫy nào không?
Tôi biết, rằng các phương pháp này có thể dễ dàng được triển khai, nhưng có lý do nào để không triển khai chúng trong khung công tác không?

+0

Downvoter, có giải thích nào không? – Dennis

+0

Có lẽ tôi không hiểu câu hỏi của bạn, nhưng không phải là đủ? 'static async Task WriteAllTextAsync (chuỗi đường dẫn, nội dung chuỗi) {await Task.Run (() => File.WriteAllText (đường dẫn, nội dung)); } ' –

+3

@codroipo: điều này được gọi là" không đồng bộ qua đồng bộ hóa "và phải tránh. Xem bài viết này, ví dụ: http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – Dennis

Trả lời

4

"... Tôi cần các đối tác không đồng bộ của chúng, nhưng chúng không tồn tại. Tại sao?"

Tất cả các XXXAsync phương pháp đã được thêm vào khuôn khổ Net cùng với async-chờ đợi (không bao gồm các thư viện mới phát triển với async nhớ) chỉ đơn giản là hàm bao quanh BeginXXX/EndXXX.

Họ không thêm bất kỳ hoạt động không đồng bộ mới nào, họ chỉ chuyển đổi các hoạt động cũ thành các hoạt động dựa trên nhiệm vụ mới. Ví dụ đây là UdpClient.SendAsync:

public Task<int> SendAsync(byte[] datagram, int bytes) 
{ 
    return Task<int>.Factory.FromAsync(BeginSend, EndSend, datagram, bytes, null); 
} 

Vì không có File.BeginReadAllFile.EndReadAll nó hiểu rằng không có File.ReadAllAsync.

Có bất kỳ cạm bẫy nào không?

Điểm yếu duy nhất khi triển khai các phương pháp này là thực hiện theo cách không đồng bộ và không giả mạo.

+1

Vì vậy, để nói lại câu trả lời của bạn, "chúng tôi quá lười để làm điều đó". :) – Dennis

+0

@ Dennis giống như họ không thêm tính năng mới vào thư viện cũ (nhưng có ...). – i3arnon

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