Mercurial > pub > ImplabNet
diff Implab/Parallels/AsyncPool.cs @ 18:0c924dff5498
Слияние с promises
author | cin |
---|---|
date | Fri, 08 Nov 2013 01:27:04 +0400 |
parents | 5a4b735ba669 |
children | 9bf5b23650c9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/Parallels/AsyncPool.cs Fri Nov 08 01:27:04 2013 +0400 @@ -0,0 +1,44 @@ +using System; +using System.Threading; + +namespace Implab.Parallels { + /// <summary> + /// Класс для распаралеливания задач. + /// </summary> + /// <remarks> + /// Используя данный класс и лямда выражения можно распараллелить + /// вычисления, для этого используется концепция обещаний. + /// </remarks> + public static class AsyncPool { + + public static Promise<T> Invoke<T>(Func<T> func) { + var p = new Promise<T>(); + + ThreadPool.QueueUserWorkItem(param => { + try { + p.Resolve(func()); + } catch(Exception e) { + p.Reject(e); + } + }); + + return p; + } + + public static Promise<T> InvokeNewThread<T>(Func<T> func) { + var p = new Promise<T>(); + + var worker = new Thread(() => { + try { + p.Resolve(func()); + } catch (Exception e) { + p.Reject(e); + } + }); + worker.IsBackground = true; + worker.Start(); + + return p; + } + } +}