비동기 메서드를 사용하고 있습니다. 타이머가 타임 아웃 이벤트를 발생시킬 때 어떻게 실행을 멈출 수 있습니까?어떻게 C#에서 비동기 메서드 실행을 막을 수 있습니까?
내 코드 :
public async Task<object> Method()
{
cts = new CancellationTokenSource();
try
{
timer = new System.Timers.Timer(3000);
timer.Start();
timer.Elapsed += (sender, e) =>
{
try
{
timer_Elapsed(sender, e, cts.Token, thread);
}
catch (OperationCanceledException)
{
return;
}
catch (Exception ex)
{
return;
}
};
await methodAsync(cts.Token);
return "message";
}
catch (OperationCanceledException)
{
return "cancelled";
}
catch (Exception ex)
{
return ex.Message;
}
}
// Async Call
public async Task<object> methodAsync(CancellationToken ct)
{
try
{
pdfDocument = htmlConverter.Convert("path", "");
}
catch(Exception ex)
{
return x.Message;
}
}
// Timer event
void timer_Elapsed(object sender, ElapsedEventArgs e, CancellationToken ct)
{
cts.Cancel();
ct.ThrowIfCancellationRequested();
}
'htmlConverter.Convert ("path", "")'코드를 취소하려고하는 것 같습니다. 이 코드를 취소하는 코드로 해지 토큰에 응답 할 수 있어야합니다. 그래서 유일한 대답은 당신이 취소 할 필요가있을 때 당신이 새로운 프로세스를 시작해서 죽일 필요가 있다는 것입니다. 그렇지 않으면 유일한 안전 조치로이 코드가 완료 될 수 있습니다. – Enigmativity
나는 이것을 취소하려고하지 않고있다.'pdfDocument = htmlConverter.Convert ("path", "");'코드. 그냥 methodAsync() 함수를 죽이려 고하십시오. 어떨까요? –
'methodAsync' 함수에서 진행되는 유일한 일은'.Convert' 호출입니다. 그래서 하나 멈추는 것은 다른 것을 멈추는 것과 같습니다. 작업/스레드를 안전하게 취소 할 수 없습니다. 취소 토큰에 응답 할 수 있어야합니다. – Enigmativity