using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AppTime { static class Utils { public static T CheckTimeout(Func act, Func whenTimeout, int timeoutMs, bool abortThread = true) { var isTimeout = true; Exception ex = null; var t = new Thread(() => { try { act(); isTimeout = false; } catch (Exception e) { ex = e; } }); t.Start(); t.Join(timeoutMs); if (isTimeout) { if (abortThread) { t.Abort(); } return whenTimeout(t); } if (ex != null) { throw ex; } return default(T); } public static Exception Try(Action act) { try { act(); return null; } catch (Exception ex) { return ex; } } } }