0
정기적 인 타이머 (10 초)를 구현해야합니다. 그러면 몇 가지 변경 사항을 확인하고 데이터베이스와 UI를 업데이트합니다. "작업"이 끝날 때까지 기다렸다가 타이머를 다시 시작해야합니다. "Job"이 시작될 때작업 항목이 완료 될 때까지 UWP ThreadPoolTimer가 대기합니다.
timer.Cancel()
을 호출 한 다음 완료되면 타이머를 다시 만듭니다. 하지만 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));
}
문제는, 내가 "작업"이 완료 될 때까지 기다릴 수있는 방법을 다시 시작된다 전체 코드를 참조하십시오?
나는 앱 일시 중지시 '일시 중지()'와 같이 worker 전역을 중지하려면 'private bool IsStop = false; '를 사용하고있었습니다. –