Problem Statement: In some real time scenario, you may need to cancel some long running tasks in certain time interval and then proceed.
Here in below example, i am calling some infinite time method and am not sure when it will be completed. So i am making 30 seconds maximum to wait and cancelling it.
RunSomeTestJob();
string RunSomeTestJob()
{
string result = "";
//loop your logic
try
{
Console.WriteLine("Running Job Started " + DateTime.Now.ToString());
// Create CancellationTokenSource.
var source = new CancellationTokenSource();
// ... Get Token from source.
var token = source.Token;
var someTask = Task.Run(() =>
{
result =
infinteJobWork(token);
}, token);
someTask.Wait(30 *
1000);
//someTask.Dispose();
source.Cancel();
}
catch (Exception ex)
{
//suppress error and proceed
//log somewhere
}
Console.Write("Running Job Completed " + result + DateTime.Now.ToString());
Console.Read();
//proceed with next steps
return result;
}
string
infinteJobWork(CancellationToken token)
{
//Short running Job - Fixed timing
//for (int i = 0; i < 3; i++)
{
//Long running Job - Indefinite time
while (true)
{
//TODO: make some api call or some work to external api
Console.WriteLine("Running Job : " + DateTime.Now.ToString());
Thread.Sleep(5 *
1000);
// See if we are canceled from our CancellationTokenSource.
if
(token.IsCancellationRequested)
{
Console.WriteLine("Job cancelled");
return "Job cancelled";
}
}
}
//return "Job done";
}