Mercurial > pub > ImplabNet
comparison Implab/Parallels/AsyncPool.cs @ 18:0c924dff5498
Слияние с promises
| author | cin |
|---|---|
| date | Fri, 08 Nov 2013 01:27:04 +0400 |
| parents | 5a4b735ba669 |
| children | 9bf5b23650c9 |
comparison
equal
deleted
inserted
replaced
| 6:dfa21d507bc5 | 18:0c924dff5498 |
|---|---|
| 1 using System; | |
| 2 using System.Threading; | |
| 3 | |
| 4 namespace Implab.Parallels { | |
| 5 /// <summary> | |
| 6 /// Класс для распаралеливания задач. | |
| 7 /// </summary> | |
| 8 /// <remarks> | |
| 9 /// Используя данный класс и лямда выражения можно распараллелить | |
| 10 /// вычисления, для этого используется концепция обещаний. | |
| 11 /// </remarks> | |
| 12 public static class AsyncPool { | |
| 13 | |
| 14 public static Promise<T> Invoke<T>(Func<T> func) { | |
| 15 var p = new Promise<T>(); | |
| 16 | |
| 17 ThreadPool.QueueUserWorkItem(param => { | |
| 18 try { | |
| 19 p.Resolve(func()); | |
| 20 } catch(Exception e) { | |
| 21 p.Reject(e); | |
| 22 } | |
| 23 }); | |
| 24 | |
| 25 return p; | |
| 26 } | |
| 27 | |
| 28 public static Promise<T> InvokeNewThread<T>(Func<T> func) { | |
| 29 var p = new Promise<T>(); | |
| 30 | |
| 31 var worker = new Thread(() => { | |
| 32 try { | |
| 33 p.Resolve(func()); | |
| 34 } catch (Exception e) { | |
| 35 p.Reject(e); | |
| 36 } | |
| 37 }); | |
| 38 worker.IsBackground = true; | |
| 39 worker.Start(); | |
| 40 | |
| 41 return p; | |
| 42 } | |
| 43 } | |
| 44 } |
