웹 페이지 (REST 사용)를 주기적으로 확인한 다음 최종 응답을 기다리는 기능이 있습니다. "최종"응답을 다시 시도합니다.Missing CancellationToken.WaitHandle.Set() 또는 작업 완료를 나타내는 방법
void PeriodicallyCheckSomething()
{
Task.Run(() => {
var isTaskComplete = false;
while (!isTaskComplete)
{
CancellationToken.WaitHandle.Wait(5000);
if (isTaskComplete || CancellationToken.IsCancellationRequested)
return;
CheckProgress((isComplete) => {
isTaskComplete = isComplete;
CancellationToken.WaitHandle.Set(); // <== can't do this
});
}
});
}
// CheckProgress - exit's immediately, we use updateStatus to report the result
void CheckProgress(Action<bool> updateStatus)
{
MakeWebRequest((data) => {
var isComplete = (data.Result == 999);
updateStatus(isComplete);
});
}
작업을 정상적으로 종료하고 싶습니다. 결과를 얻을 때 isTaskComplete 플래그를 설정했지만 작업이 이미 대기 상태에 있습니다.
작업을 즉시 종료 할 수 있도록 Waithandle을 "설정"하고 싶습니다. 그러나 CancellationToken.Waithandle에는 Set 기능이 없습니다.
기다리는 더 좋은 방법은 ... 작업 취소와 Set와 같은 것을 사용하여 신호를 보낼 수있는 기능을 모두 지원합니까?
분명히 코드가 잘못되었지만 동일한 결과로 원하는 최종 결과가 명확하지 않습니다. 예를 들어, 취소 토큰을 확인하는 것 외에는 아무 것도하지 않는 이유는 무엇입니까? – theMayer
CancellationTokenSource.Cancel()이이 함수 외부에서 호출됩니다. 예를 들어 누군가 UI에서 취소 버튼을 누르면 –
네, 그게 유일한 이유는 그것을 확인하는 것입니다. – theMayer