Ich verwende eine asynchrone Methode. Wie kann ich die Ausführung stoppen, wenn ein Timer ein Timeout-Ereignis auslöst?Wie stoppe ich die asynchrone Methodenausführung in C#?
Mein Code:
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();
}
Sie scheinen zu versuchen, den Code 'htmlConverter.Convert (" path "," ")' abzubrechen. Es gibt keine Möglichkeit, diesen Code zu stornieren, da Code, der storniert, in der Lage sein muss, auf das Stornierungs-Token zu antworten. Die einzige Antwort ist, dass Sie einen neuen Prozess hochfahren und ihn abbrechen müssen, wenn Sie abbrechen müssen. Andernfalls ist die einzige sichere Aktion, dass dieser Code vollständig ausgeführt wird. – Enigmativity
Ich versuche nicht, diese 'pdfDocument = htmlConverter.Convert (" Pfad "," ");' Code zu stornieren. Versuchen Sie einfach, die Methode MethodeAsync() zu beenden. Gibt es einen Weg? –
Das einzige, was in der 'methodAsync'-Funktion vor sich geht, ist der Aufruf von' .Convert', so dass man das gleiche aufhebt wie das andere. Sie können die Task/den Thread nicht zum Abbrechen zwingen. Sie müssen in der Lage sein, auf das Stornierungs-Token zu antworten, damit es funktioniert. – Enigmativity