- Phát triển data.frame theo cách hiệu quả về bộ nhớ
- phát hiện rò rỉ bộ nhớ ruby/ruby on rails
- Không thể giải quyết việc nhập android.support.v7.app
- Ổ cắm miền UNIX và bộ nhớ chia sẻ (tệp được ánh xạ)
Trong bài viết này:http://msdn.microsoft.com/en-us/magazine/cc164015.aspxTuyên bố của tác giả System.Threading.Timer không an toàn cho luồng.
Kể từ đó, điều này đã được nhắc lại trên các blog, trong cuốn sách "CLR via C#" của Richter và trên SO, nhưng chưa bao giờ được chứng minh là đúng.
Mà còn Tài liệu MSDNĐảm bảo "Loại này an toàn với luồng".
1) Ai đang nói sự thật?
2) Nếu đây là bài viết gốc, điều gì đã làm cho nó Hệ thống.Threading.Timer Không an toàn cho luồng và lớp bọc của nó Hệ thống.Bộ đếm thời gian.Bộ đếm thời gian Làm thế nào để đạt được độ an toàn của luồng cao hơn?
Cảm ơn
1 Câu trả lời
Không, mọi việc không diễn ra như thế. Lớp Timer không đồng bộ .NET hoàn toàn an toàn cho luồng. Vấn đề với tính an toàn của luồng là nó không phải là thuộc tính chuyển giao, nó không thực hiện việc thực thikhác Mã cũng trở nên an toàn với luồng. Bạn là người viết mã, không phải là lập trình viên .NET Framework.
Giả định rất phổ biến rằng mã giao diện người dùng Windows về cơ bản không an toàn cho luồng cũng là một vấn đề tương tự. Điều này không đúng, mã bên trong Windows hoàn toàn an toàn với luồng. Vấn đề là tất cả mã đang chạy không phải là một phần của Windows và không được viết bởi các lập trình viên của Microsoft.Luôn luônrất nhiều Mã được kích hoạt bởi lệnh gọi SendMessage(). Nó chạy mã tùy chỉnh do các lập trình viên viết. Hoặc mã mà anh ấy không viết, chẳng hạn như một hook được cài đặt bởi một tiện ích. Giả sử chương trình không làm điều này trở nên khó khăn và chỉ thực thi mã xử lý thông báo trên một luồng. Anh ấy thường làm điều này, và nếu không làm vậy, anh ấy có thể gặp rất nhiều rắc rối.
Sự kiện System.Timers.Timer.Elapsed và lệnh gọi lại System.Threading.Timer đều có cùng một vấn đề. Khi các lập trình viên viết mã,rất nhiều sai lầm. Nó chạy hoàn toàn không đồng bộ trên một luồng nhóm luồng tùy ý và việc chạm vào bất kỳ biến chia sẻ nào đều yêu cầu khóa để bảo vệ trạng thái. Rất dễ bị bỏ qua. Tệ hơn nữa, khi mãlạiBạn có thể dễ dàng gặp phải rắc rối khi chạy trước khi lệnh gọi trước đó dừng lại. Được kích hoạt khi khoảng thời gian hẹn giờ quá ngắn hoặc máy chịu quá nhiều tải. Bây giờ có hai Các luồng chạy cùng một mã hiếm khi mang lại kết quả tốt.
Tin tức lúc mười một giờ, chủ đề khó.
Về tính an toàn của luồng trong c# - System.Timers.Timer và System.Threading.Timer, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19577296/
Tôi có một dự án Web API 2 với trang trợ giúp chạy tốt tại địa phương nhưng khi tôi đẩy nó lên Azure thì nó báo lỗi này: Phương pháp không tìm thấy: 'System.String System.S
Tôi có hai máy chủ nhưng nhìn chung đều chạy cùng một thiết lập - IIS, SQL Server, v.v. Một cái thì báo lỗi này, cái kia thì không. Tôi xuất bản cùng một mã cho cả hai từ Visual Studio. Tất cả đều chạy .NET CLR Ve
System.out được khai báo là public static final PrintStream out. Nhưng bạn có thể gọi System.setOut() để phân bổ lại nó. Ừm? Làm sao điều này có thể xảy ra nếu nó là quyết định cuối cùng?
System.out được khai báo là public static final PrintStream out. Nhưng bạn có thể gọi System.setOut() để phân bổ lại nó. Ừm? Làm sao điều này có thể xảy ra nếu nó là quyết định cuối cùng?
Tôi có truy vấn linq này: private void GetReceivedInvoiceTasks(User user, List tasks) { var areaIds = user.A
Tôi có một ứng dụng MonoTouch và khi tôi biên dịch nó cho một thiết bị, tôi nhận được lỗi sau: Lỗi MT2002: Không thể giải quyết tham chiếu: System.Boolean System
Xin chào, tôi có một View tên là DailyVisitReport. Trong chế độ xem này, tôi có hai trường có tên là FromDate và toDate. Nếu tôi chọn FromDate và ToDate tùy thuộc vào
Có thể đọc danh sách các cặp từ đối tượng ObjectContext không? Tôi có một truy vấn cơ sở dữ liệu như thế này trong một quy trình được lưu trữ SELECT T.Id as Item1, -- đây là guid T.Wo
Tôi đang cố gắng tạo điểm cuối Odata nhưng tôi nhận được lỗi này mỗi khi tôi thử thực hiện bất kỳ truy vấn nào liên quan đến ngày tháng. Tôi đã tái tạo nó trong một ví dụ rất đơn giản dưới đây. Bảng cơ sở dữ liệu EDMX (phân đoạn)
Tôi đang cố gắng tạo điểm cuối Odata nhưng tôi nhận được lỗi này mỗi khi tôi thử thực hiện bất kỳ truy vấn nào liên quan đến ngày tháng. Tôi đã tái tạo nó trong một ví dụ rất đơn giản dưới đây. Bảng cơ sở dữ liệu EDMX (phân đoạn)
Tôi có một phương pháp tạo danh sách các kiểu lớp từ dữ liệu từ trình đọc dữ liệu. nếu (datareader != null && datareader .HasRows) { Từ điển pDict = GetP
Tôi có một số mã C++ cũ sử dụng stdio để nhập và xuất. Mã này cũng tạo ra một tiến trình mới thông qua fork. Nó ánh xạ lại stdio vào mỗi tiến trình mới để mỗi phiên có dữ liệu riêng. Tôi đang cân nhắc việc làm
Ứng dụng của tôi được xây dựng/liên kết/triển khai tới trình mô phỏng tốt, nhưng tôi đang cố gắng xây dựng/triển khai ứng dụng tới thiết bị thực lần đầu tiên và trình liên kết bị lỗi. Tôi không sử dụng System.Console hoặc ConsoleColor trong bất kỳ ứng dụng nào của tôi
Chủ yếu là tôi tò mò. Chúng tôi có một đối tượng gọi là Unit trong cơ sở mã - một thành phần đại diện cho một cây cầu hoặc một con đường. Trong trường hợp của chúng tôi, việc nhìn thấy lệnh ReactiveUI với Unit có thể gây mơ hồ. là một trong những từ chung trong bản tuyên bố.
Tôi đang cố gắng chuyển đổi một biến Object thành StreamWriter. Tuy nhiên, nó không có tác dụng. Có chuyện gì vậy? Tệp StreamWriter = (StreamWriter) myObject; Câu trả lời hay nhất myObjec
Tại sao đoạn mã sau không biên dịch được? sử dụng System; sử dụng System.Linq; sử dụng System.Linq.Expressions; lớp tĩnh công khai Extens
Tôi đang phát triển một ứng dụng Visual Basic nhắm tới .NET 4.5 bằng Visual Studio Community 2015. Tôi không viết ứng dụng này, vì vậy tôi đã thêm tất cả các phụ thuộc còn thiếu bằng NuGet.
Tôi vừa mới bắt đầu sử dụng PowerShell và đang tạo một hàm mã hóa rất đơn giản. Tôi muốn lấy từng ký tự trong chuỗi, chuyển đổi nó thành số nguyên và thêm một số đã chọn, sau đó chuyển đổi lại thành ký tự. Điều này hoạt động tốt: chức năng
Một số người sử dụng ứng dụng của tôi dường như gặp lỗi System.MissingMethodException: Method not found: 'System.Object System.Windows.T
Tôi mới làm quen với C# và Entities và tôi muốn hỏi liệu có ai có thể giúp tôi không. Tôi có một select trả về customerid của tôi nên tôi muốn truyền nó như một tham số cho constructor của tôi, kiểu tham số constructor của tôi là guid nhưng select của tôi lại có kiểu khác và tôi không biết
Tôi là một lập trình viên xuất sắc, rất giỏi!