0
我需要實現一個定期計時器(10秒),它將檢查一些更改並更新數據庫和UI。我需要等到「作業」完成,然後再次啓動計時器。我打電話UWP ThreadPoolTimer等到工作項完成
timer.Cancel()
「Job」開始,然後在完成時再次創建計時器。但似乎當我使用使用async關鍵字的工作項處理程序時,線程池工作項可能會在處理程序中的所有代碼執行之前設置爲完整狀態。 查看全部代碼:
private bool IsStop = false;
private async Task DoWork()
{
try
{
if (IsStop)
{
Stop();
return;
}
timer.Cancel();
var resultIds = await DB.getUnresolvedData();
if (resultIds.IsNullOrEmpty())
{
return;
}
var json = await server.RequestSTatus(resultIds);
if (string.IsNullOrEmpty(json))
return;
Model result = JsonConvert.DeserializeObject<Model>(json);
UpdateDB(result);
}
catch (Exception ex)
{
}
finally
{
Start();
}
}
public void Start()
{
if (IsStop) return;
timer = ThreadPoolTimer.CreatePeriodicTimer(async (t) =>
{
await DoWork();
}, TimeSpan.FromSeconds(10));
}
的問題是,我怎麼能等到「作業」完成,然後再次啓動?
我正在使用 'private bool IsStop = false;'阻止工作者全局,例如App暫停時的'Pause()' –