Nie jestem pewien, którą strategię zastosować ... Koncentruję się na tym, że moja operacja jest zakończona, ale chciałbym również, aby problemy z wydajnością były minimalne. ... istnieje metoda o nazwie Execute(), która musi czekać (działać synchronicznie) do zakończenia operacji. Ta operacja dzieje się w innym wątku. Istnieją 2 sposoby realizują to samo ...Aby dokonać wyboru między ManualResetEvent lub Thread.Sleep()
Korzystając ManualResetEvent
void Execute()
{
taskHandle = new ManualResetEvent(false);
.
.
//delegate task to another thread
.
.
taskHandle.WaitOne();
}
LUB
za pomocą prostego natomiast skonstruować
void Execute()
{
.
.
//delegate task to another thread
.
.
while (!JobCompleted)
Thread.Sleep(1000);
}
którym jeden z dwóch podejść powinienem przyjąć ... dlaczego?
EDYTOWANIE:
Q2. A co, gdybym po prostu miał puste podczas pracy? Co za różnica...?
while(!JobCompleted);
EDIT: (coś Zebrałem wcześniej)
http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - Ten artykuł mówi manualresets są comparitively wolniej, ponieważ wychodzą z kodu zarządzanego i z powrotem w ...
prostu chcę podkreślić Thread.Sleep (0) użytkowania. Określ zero (0), aby wskazać, że ten wątek powinien zostać zawieszony, aby umożliwić wykonanie innych oczekujących wątków. W tym przypadku Sleep (0) jest lepszy niż Sleep (1000), ale używanie WaitHandle jest jeszcze bardziej odpowiednie. –
Pusta pętla while jest w zasadzie wirówką, która całkowicie pochłonie procesor. Niepolecane. – nitzmahone