There are some scenarios when you can't afford to allow any long running external/internal method to take forever and eat up your processing resource. You should time it out if it takes longer than X units.

 There are several ways to do that. I like the way using cancellation token the most.

 Here we are calling GetResult() method which might take longer than 5000ms.Code snippet:

 int QueryTimeOut = 5000; //in ms
var tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
var task = Task.Factory.StartNew(() => queryRun.GetResult(), token);
timedOut = false;

if (!task.Wait(QueryTimeOut, token))
timedOut = true;
message = String.Format(" Method Timed out");
return -1;
Int32 result = Convert.ToInt32(task.Result);
return result;

NOTE: Above code does not kill the GetResult() which still runs in background. To Abort processing of GetResult/ long running method, please see below snippet:

 using System;
using System.Threading;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace n
public class MonitorSample

private static int GetResult()
int result = 0;
while (++result < 500)
return result;
public static void Main(String[] args)
int QueryTimeOut = 50; //in ms
int result = 0;
Boolean timeOut = false;
ManualResetEvent wait = new ManualResetEvent(false);
Thread work = new Thread(new ThreadStart(() =>
//some long running method requiring synchronization
result = GetResult();
Boolean signal = wait.WaitOne(QueryTimeOut);
if (!signal) {
timeOut = true;
Console.WriteLine(String.Format("Result = {0}, timedout = {1}", result, timeOut));