C# không có chung đồng thói quen. Một đồng thường trình chung là nơi đồng thường có ngăn xếp riêng của nó, tức là nó có thể gọi các phương thức khác và các phương thức đó có thể "mang lại" các giá trị. Việc thực hiện các chương trình hợp tác chung đòi hỏi phải tạo ra một số thứ thông minh với các ngăn xếp, có thể lên đến và bao gồm việc phân bổ các khung ngăn xếp (các cấu trúc ẩn chứa các biến cục bộ) trên heap. Điều này có thể được thực hiện, một số ngôn ngữ làm điều đó (ví dụ: Đề án), nhưng nó hơi khó để làm điều đó đúng. Ngoài ra, nhiều lập trình viên tìm thấy tính năng khó hiểu.
Đồng thường có thể được mô phỏng theo chủ đề. Mỗi luồng có ngăn xếp riêng. Trong một thiết lập đồng-thường xuyên, cả hai chủ đề (người gọi ban đầu, và các chủ đề cho đồng thường xuyên) sẽ thay thế kiểm soát, họ sẽ không bao giờ thực sự chạy đồng thời. Cơ chế "lợi nhuận" sau đó là một trao đổi giữa hai chủ đề, và như vậy nó là tốn kém (đồng bộ hóa, một vòng qua hạt nhân hệ điều hành và lên lịch ...). Ngoài ra, có nhiều chỗ cho rò rỉ bộ nhớ (các đồng thường xuyên phải được rõ ràng "dừng lại", nếu không các chủ đề chờ đợi sẽ dính mãi mãi). Do đó, điều này hiếm khi được thực hiện.
C# cung cấp tính năng đồng thường xuyên bị đánh cắp được gọi là trình lặp. Trình biên dịch C# tự động chuyển đổi mã trình vòng lặp thành một lớp trạng thái cụ thể, với các biến cục bộ trở thành các trường lớp. Sau đó, năng suất là ở mức VM, một đồng bằng return
. Một điều như vậy là có thể thực hiện được, miễn là "năng suất" được thực hiện từ chính mã lặp, chứ không phải từ một phương thức mà mã trình vòng lặp gọi ra. C# iterators đã bao gồm nhiều trường hợp sử dụng và các nhà thiết kế C# không muốn đi xa hơn xuống con đường tới continuations. Một số người châm biếm muốn nhấn mạnh rằng việc thực hiện tiếp tục đầy đủ tính năng sẽ ngăn C# không hiệu quả như Java đối phương của nó (tiếp tục hiệu quả là khả thi, nhưng điều này đòi hỏi khá nhiều công việc với GC và trình biên dịch JIT).
Nguồn
2010-03-22 15:41:04
Eric Lippert có một bài đăng trên blog này ở đâu đó –
Cân nhắc định dạng mã của bạn nhiều hơn một chút bằng cách sử dụng tab/dấu cách. – Mizipzor
định dạng tab ... thực sự là cần thiết và không quan trọng về thời gian, là vấn đề python. –