Tôi không chắc chiến lược nào sẽ áp dụng ... Tôi đang tập trung vào hoạt động của mình, nhưng tôi cũng muốn giữ các vấn đề về hiệu năng trong một phút. ..có một phương pháp được gọi là Thực hiện() phải chờ (chạy đồng bộ) cho đến khi một thao tác hoàn tất. Thao tác này xảy ra trên một chuỗi khác. Có 2 cách để thực hiện điều tương tự ...Để lựa chọn giữa ManualResetEvent hoặc Thread.Sleep()
Bằng cách sử dụng ManualResetEvent
void Execute()
{
taskHandle = new ManualResetEvent(false);
.
.
//delegate task to another thread
.
.
taskHandle.WaitOne();
}
HOẶC
Bằng cách sử dụng một cách đơn giản trong khi xây dựng
void Execute()
{
.
.
//delegate task to another thread
.
.
while (!JobCompleted)
Thread.Sleep(1000);
}
Mà một trong hai cách tiếp cận tôi nên áp dụng ... tại sao?
CHỈNH SỬA:
Q2. Điều gì sẽ xảy ra nếu tôi chỉ có một sự tương phản trống rỗng? Có gì khác biệt...?
while(!JobCompleted);
EDIT: (cái gì tôi thu thập được trước đó)
http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - Bài viết này nói manualresets là comparitively chậm hơn bởi vì họ đi ra khỏi mã số quản lý và trở lại trong ...
Chỉ muốn chỉ ra Thread.Sleep (0) cách sử dụng. Chỉ định số không (0) để chỉ ra rằng luồng này sẽ bị đình chỉ để cho phép các luồng chờ khác thực thi. Trong trường hợp này, Sleep (0) tốt hơn Sleep (1000), nhưng việc sử dụng WaitHandle vẫn phù hợp hơn. –
Vòng lặp rỗng trong cơ bản là một spinwait- nó sẽ tiêu thụ hoàn toàn một CPU. Không được khuyến khích. – nitzmahone