Cách được khuyến nghị để thêm postconditions vào các phương thức không đồng bộ trả về Task<T>
là gì?Hợp đồng mã và không đồng bộ
Tôi đã đọc các gợi ý sau:
http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2-a666-6c97a4dd3a39
Các bài đề nghị thực hiện mỗi phương pháp là đồng bộ, hợp đồng đó, và sau đó thực hiện một đối tác async như là một wrapper đơn giản. Rất tiếc, tôi không thấy giải pháp này là giải pháp khả thi (có thể thông qua sự hiểu lầm của riêng tôi):
- Phương pháp async mặc dù không có bất kỳ hợp đồng mã thực nào và do đó có thể làm theo ý muốn.
- Codebases được cam kết không đồng bộ có khả năng không triển khai đối tác đồng bộ hóa cho mọi thứ. Kết quả là, việc triển khai các phương thức mới chứa
await
s trên các phương thức async khác do đó buộc phải không đồng bộ. Những phương thức này thực chất không đồng bộ và không thể dễ dàng được chuyển đổi thành đồng bộ. Chúng không chỉ đơn giản là hàm bao.
Ngay cả khi chúng tôi không còn giá trị điểm sau bằng cách nói chúng ta có thể sử dụng .Result
hoặc .Wait()
thay vì await
(mà thực sự sẽ gây ra một số SyncContext
s đến bế tắc, và sẽ phải được viết lại trong phương pháp async anyway), Tôi vẫn còn bị thuyết phục về điểm đầu tiên.
Có bất kỳ ý tưởng thay thế nào hoặc có bất kỳ điều gì mà tôi đã bỏ lỡ về hợp đồng mã và TPL không?
Không ai nói MVP không thể có được nó sai. –