Wenn Sie einen CancellationTokenSource
mit dem CancellationTokenSource(TimeSpan)
Konstruktor verwenden, wird es einfach, eine Methode zu schreiben, die nach einer bestimmten Zeit eine Aktion abbricht.
Sie können eine Methode wie folgt schreiben:
public static void RunTimedAction(Action action, TimeSpan timeout)
{
using (var cancellationTokenSource = new CancellationTokenSource(timeout))
action(cancellationTokenSource.Token);
}
Dann können Sie eine Aktion schreiben, die einen CancellationToken
als Parameter akzeptiert, so wie hier:
private void action(CancellationToken cancel)
{
int i;
for (i = 0; i < 1000000; ++i)
{
if (cancel.IsCancellationRequested)
break;
Thread.Sleep(10); // Arbeit simulieren.
}
Console.WriteLine("Aktion erreicht " + i);
}
Was Sie so verwenden können:
Console.WriteLine("Gestartet um " + DateTime.Now);
RunTimedAction(action, TimeSpan.FromSeconds(10));
Console.WriteLine("Beendet um " + DateTime.Now);
Lassen Sie uns das in ein vollständiges Demoprogramm zusammenstellen:
using System;
using System.Threading;
namespace Demo
{
class Program
{
void run()
{
Console.WriteLine("Gestartet um " + DateTime.Now);
RunTimedAction(action, TimeSpan.FromSeconds(10));
Console.WriteLine("Beendet um " + DateTime.Now);
}
private void action(CancellationToken cancel)
{
int i;
for (i = 0; i < 1000000; ++i)
{
if (cancel.IsCancellationRequested)
break;
Thread.Sleep(10); // Arbeit simulieren.
}
Console.WriteLine("Aktion erreicht " + i);
}
public static void RunTimedAction(Action action, TimeSpan timeout)
{
using (var cancellationTokenSource = new CancellationTokenSource(timeout))
action(cancellationTokenSource.Token);
}
static void Main()
{
new Program().run();
}
}
}