/// <summary> /// 排队初始化天气信息(等待(一定的时间,让)主线程中的初始化完成后再进行当前的Task) /// </summary> private void OrderInit() { if (TokenSourceInitWeatherInfo.Token.CanBeCanceled) { TokenSourceInitWeatherInfo.Cancel(); } TokenSourceInitWeatherInfo = new CancellationTokenSource(); CancellationToken token = TokenSourceInitWeatherInfo.Token; Task.Factory.StartNew(() => { if (InitComplete) { WriteLog("\t手动更新开始"); InitAllWeatherInfo(); WriteLog("\t手动刷新结束"); } else { ShowErrorInfoStr("手动刷新操作已拦截。检测到有初始化任务尚未完成,本次天气信息刷新将在一分钟之后进行。"); token.WaitHandle.WaitOne(600000); if (InitComplete) { InitAllWeatherInfo(); } } }, token); }
private void TaskWhileInit() { Task.Factory.StartNew(() => { while (true) { WriteLog("\t自动更新开始"); #region 其他初始化天气信息的Task通通取消 if (TokenSourceInitWeatherInfo.Token.CanBeCanceled) { TokenSourceInitWeatherInfo.Cancel(); } #endregion while (!InitComplete) //当有其他的更新正在进行时,就等待其完成 { WriteLog("\t发现有未完成任务,自动更新等待中..."); Thread.Sleep(1000); } InitAllWeatherInfo(); WriteLog("\t自动更新结束"); Thread.Sleep(TimingInitInt); } }); }