@@ -168,68 +168,62 @@ private async Task Timeout()
168168 }
169169 }
170170
171- private Task OnStart ( TimeSpan val )
171+ private async Task OnStart ( TimeSpan val )
172172 {
173173 Value = val ;
174174 IsPause = false ;
175175 CurrentTimespan = Value ;
176176 AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
177177
178178 StateHasChanged ( ) ;
179+ await Task . Yield ( ) ;
179180
180- _ = Task . Run ( async ( ) =>
181+ // 点击 Cancel 后重新设置再点击 Star
182+ if ( CancelTokenSource . IsCancellationRequested )
181183 {
182- // 点击 Cancel 后重新设置再点击 Star
183- if ( CancelTokenSource . IsCancellationRequested )
184+ CancelTokenSource . Dispose ( ) ;
185+ CancelTokenSource = new CancellationTokenSource ( ) ;
186+ }
187+
188+ while ( ! CancelTokenSource . IsCancellationRequested && CurrentTimespan > TimeSpan . Zero )
189+ {
190+ try
184191 {
185- CancelTokenSource . Dispose ( ) ;
186- CancelTokenSource = new CancellationTokenSource ( ) ;
192+ await Task . Delay ( 1000 , CancelTokenSource . Token ) ;
187193 }
194+ catch ( TaskCanceledException ) { }
188195
189- while ( ! CancelTokenSource . IsCancellationRequested && CurrentTimespan > TimeSpan . Zero )
196+ if ( ! CancelTokenSource . IsCancellationRequested )
190197 {
191- try
192- {
193- await Task . Delay ( 1000 , CancelTokenSource . Token ) ;
194- }
195- catch ( TaskCanceledException ) { }
196-
197- if ( ! CancelTokenSource . IsCancellationRequested )
198- {
199- CurrentTimespan = CurrentTimespan . Subtract ( TimeSpan . FromSeconds ( 1 ) ) ;
200- await InvokeAsync ( StateHasChanged ) ;
201- }
198+ CurrentTimespan = CurrentTimespan . Subtract ( TimeSpan . FromSeconds ( 1 ) ) ;
199+ StateHasChanged ( ) ;
200+ }
202201
203- if ( IsPause )
204- {
205- ResetEvent . WaitOne ( ) ;
206- AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
202+ if ( IsPause )
203+ {
204+ ResetEvent . WaitOne ( ) ;
205+ AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
207206
208- // 重建 CancelToken
209- CancelTokenSource . Dispose ( ) ;
210- CancelTokenSource = new CancellationTokenSource ( ) ;
211- }
207+ // 重建 CancelToken
208+ CancelTokenSource . Dispose ( ) ;
209+ CancelTokenSource = new CancellationTokenSource ( ) ;
212210 }
211+ }
213212
214- if ( CurrentTimespan == TimeSpan . Zero )
213+ if ( CurrentTimespan == TimeSpan . Zero )
214+ {
215+ await Task . Delay ( 500 , CancelTokenSource . Token ) ;
216+ if ( ! CancelTokenSource . IsCancellationRequested )
215217 {
216- await Task . Delay ( 500 , CancelTokenSource . Token ) ;
217- if ( ! CancelTokenSource . IsCancellationRequested )
218+ Value = TimeSpan . Zero ;
219+ Vibrate = IsVibrate ;
220+ StateHasChanged ( ) ;
221+ if ( OnTimeout != null )
218222 {
219- Value = TimeSpan . Zero ;
220- await InvokeAsync ( async ( ) =>
221- {
222- Vibrate = IsVibrate ;
223- StateHasChanged ( ) ;
224- if ( OnTimeout != null )
225- {
226- await OnTimeout ( ) ;
227- }
228- } ) ;
223+ await OnTimeout ( ) ;
229224 }
230225 }
231- } ) ;
232- return Task . CompletedTask ;
226+ }
233227 }
234228
235229 private void OnClickPause ( )
0 commit comments