11using System . Globalization ;
22
33using LogExpert . Core . Callback ;
4- using LogExpert . Core . Classes . Filter ;
54
65using NLog ;
76
8- namespace LogExpert . Classes . Filter ;
7+ namespace LogExpert . Core . Classes . Filter ;
98
109public delegate void ProgressCallback ( int lineCount ) ;
1110
@@ -86,7 +85,6 @@ public async void DoFilter (FilterParams filterParams, int startLine, int maxCou
8685 }
8786
8887 var workStartLine = startLine ;
89- List < WaitHandle > handleList = [ ] ;
9088 _progressLineCount = 0 ;
9189 _progressCallback = progressCallback ;
9290 while ( workStartLine < startLine + maxCount )
@@ -101,17 +99,11 @@ public async void DoFilter (FilterParams filterParams, int startLine, int maxCou
10199 }
102100 _logger . Info ( CultureInfo . InvariantCulture , "FilterStarter starts worker for line {0}, lineCount {1}" , workStartLine , interval ) ;
103101
104- await Task . Run ( ( ) => DoWork ( filterParams , workStartLine , interval , ThreadProgressCallback ) ) . ContinueWith ( FilterDoneCallback ) ;
102+ var filter = await Task . Run ( ( ) => DoWork ( filterParams , workStartLine , interval , ThreadProgressCallback ) ) . ConfigureAwait ( false ) ;
103+ FilterDoneCallback ( filter ) ;
105104 workStartLine += interval ;
106105 }
107106
108- WaitHandle [ ] handles = [ .. handleList ] ;
109- // wait for worker threads completion
110- if ( handles . Length > 0 )
111- {
112- WaitHandle . WaitAll ( handles ) ;
113- }
114-
115107 MergeResults ( ) ;
116108 }
117109
@@ -147,46 +139,40 @@ private Filter DoWork (FilterParams filterParams, int startLine, int maxCount, P
147139 _logger . Info ( CultureInfo . InvariantCulture , "Started Filter worker [{0}] for line {1}" , Environment . CurrentManagedThreadId , startLine ) ;
148140
149141 // Give every thread own copies of ColumnizerCallback and FilterParams, because the state of the objects changes while filtering
150- FilterParams threadFilterParams = filterParams . CloneWithCurrentColumnizer ( ) ;
142+ var threadFilterParams = filterParams . CloneWithCurrentColumnizer ( ) ;
151143 Filter filter = new ( ( ColumnizerCallback ) _callback . Clone ( ) ) ;
152144 lock ( _filterWorkerList )
153145 {
154146 _filterWorkerList . Add ( filter ) ;
155147 }
156148
157- if ( _shouldStop )
149+ if ( ! _shouldStop )
158150 {
159- return filter ;
160- }
161151
162- _ = filter . DoFilter ( threadFilterParams , startLine , maxCount , progressCallback ) ;
163- _logger . Info ( CultureInfo . InvariantCulture , "Filter worker [{0}] for line {1} has completed." , Environment . CurrentManagedThreadId , startLine ) ;
152+ _ = filter . DoFilter ( threadFilterParams , startLine , maxCount , progressCallback ) ;
153+ _logger . Info ( CultureInfo . InvariantCulture , "Filter worker [{0}] for line {1} has completed." , Environment . CurrentManagedThreadId , startLine ) ;
164154
165- lock ( _filterReadyList )
166- {
167- _filterReadyList . Add ( filter ) ;
155+ lock ( _filterReadyList )
156+ {
157+ _filterReadyList . Add ( filter ) ;
158+ }
168159 }
169160
170161 return filter ;
171162 }
172163
173- private void FilterDoneCallback ( Task < Filter > filterTask )
164+ private void FilterDoneCallback ( Filter filter )
174165 {
175- if ( filterTask . IsCompleted )
166+ lock ( _filterReadyList )
176167 {
177- Filter filter = filterTask . Result ;
178-
179- lock ( _filterReadyList )
180- {
181- _filterReadyList . Add ( filter ) ;
182- }
168+ _filterReadyList . Add ( filter ) ;
183169 }
184170 }
185171
186172 private void MergeResults ( )
187173 {
188174 _logger . Info ( CultureInfo . InvariantCulture , "Merging filter results." ) ;
189- foreach ( Filter filter in _filterReadyList )
175+ foreach ( var filter in _filterReadyList )
190176 {
191177 foreach ( var lineNum in filter . FilterHitList )
192178 {
@@ -195,13 +181,15 @@ private void MergeResults ()
195181 _filterHitDict . Add ( lineNum , lineNum ) ;
196182 }
197183 }
184+
198185 foreach ( var lineNum in filter . FilterResultLines )
199186 {
200187 if ( ! _filterResultDict . ContainsKey ( lineNum ) )
201188 {
202189 _filterResultDict . Add ( lineNum , lineNum ) ;
203190 }
204191 }
192+
205193 foreach ( var lineNum in filter . LastFilterLinesList )
206194 {
207195 if ( ! _lastFilterLinesDict . ContainsKey ( lineNum ) )
@@ -210,6 +198,7 @@ private void MergeResults ()
210198 }
211199 }
212200 }
201+
213202 FilterHitList . AddRange ( _filterHitDict . Keys ) ;
214203 FilterResultLines . AddRange ( _filterResultDict . Keys ) ;
215204 LastFilterLinesList . AddRange ( _lastFilterLinesDict . Keys ) ;
0 commit comments