public virtual IProgressResult <TProgress, TResult> Execute <TProgress, TResult>(Action <IProgressPromise <TProgress, TResult> > action) { ProgressResult <TProgress, TResult> result = new ProgressResult <TProgress, TResult>(true); #if NETFX_CORE Task.Factory.StartNew(() => { try { if (result.IsCancellationRequested) { result.SetCancelled(); return; } action(result); if (!result.IsDone) { result.SetResult(null); } } catch (Exception e) { if (!result.IsDone) { result.SetException(e); } } }); #else ThreadPool.QueueUserWorkItem((state) => { try { if (result.IsCancellationRequested) { result.SetCancelled(); return; } action(result); if (!result.IsDone) { result.SetResult(null); } } catch (Exception e) { if (!result.IsDone) { result.SetException(e); } } }); #endif return(result); }
public virtual IProgressResult <TProgress> Execute <TProgress>(Action <IProgressPromise <TProgress> > action) { ProgressResult <TProgress> result = new ProgressResult <TProgress>(true); Executors.RunAsyncNoReturn(() => { try { if (result.IsCancellationRequested) { result.SetCancelled(); return; } action(result); if (!result.IsDone) { result.SetResult(null); } } catch (Exception e) { if (!result.IsDone) { result.SetException(e); } } }); return(result); }