namespace TimeOutHelper
{internal class Program{public delegate TR TimeOutDelegate<in T, out TR>(T param);private static void Main(){Dictionary<Guid, string> result;Console.WriteLine(TimeoutFunction.Execute(Test, "Hello, World!", out result, TimeSpan.FromSeconds(3)));Console.WriteLine("Hello, World!");Console.ReadKey();}public static Dictionary<Guid, string> Test(string sourceString){var result = sourceString.ToDictionary(character => Guid.NewGuid(),character => character.ToString(CultureInfo.InvariantCulture));Thread.Sleep(4000);return result;}public static class TimeoutFunction{public static Boolean Execute<T, TR>(TimeOutDelegate<T, TR> timeoutMethod, T param, out TR result, TimeSpan timeout){var asyncResult = timeoutMethod.BeginInvoke(param, null, null);if (!asyncResult.AsyncWaitHandle.WaitOne(timeout, false)){result = default(TR);return true;}result = timeoutMethod.EndInvoke(asyncResult);return false;}}}
}