Mercurial > pub > ImplabNet
comparison Implab.Fx/PromiseHelpers.cs @ 72:d67b95eddaf4 v2
promises refactoring
| author | cin | 
|---|---|
| date | Thu, 04 Sep 2014 18:47:12 +0400 | 
| parents | 381095ad0a69 | 
| children | c761fc982e1d | 
   comparison
  equal
  deleted
  inserted
  replaced
| 71:1714fd8678ef | 72:d67b95eddaf4 | 
|---|---|
| 1 using System; | 1 using System; | 
| 2 using System.Collections.Generic; | |
| 3 using System.Linq; | |
| 4 using System.Text; | |
| 5 using System.Windows.Forms; | 2 using System.Windows.Forms; | 
| 6 using System.Threading; | 3 using System.Threading; | 
| 7 | 4 | 
| 8 namespace Implab.Fx | 5 namespace Implab.Fx | 
| 9 { | 6 { | 
| 30 if (that == null) | 27 if (that == null) | 
| 31 throw new ArgumentNullException("that"); | 28 throw new ArgumentNullException("that"); | 
| 32 if (ctl == null) | 29 if (ctl == null) | 
| 33 throw new ArgumentNullException("ctl"); | 30 throw new ArgumentNullException("ctl"); | 
| 34 | 31 | 
| 35 var directed = new Promise<T>(); | 32 var directed = new ControlBoundPromise<T>(ctl,that,true); | 
| 36 | 33 | 
| 37 that.Then( | 34 that.Then( | 
| 38 res => | 35 directed.Resolve, | 
| 39 { | |
| 40 if (ctl.InvokeRequired) | |
| 41 ctl.Invoke(new Action<T>(directed.Resolve), res); | |
| 42 else | |
| 43 directed.Resolve(res); | |
| 44 }, | |
| 45 err => | 36 err => | 
| 46 { | 37 { | 
| 47 if (ctl.InvokeRequired) | 38 directed.Reject(err); | 
| 48 ctl.Invoke(new Action<Exception>(directed.Reject), err); | 39 return default(T); | 
| 49 else | |
| 50 directed.Reject(err); | |
| 51 } | 40 } | 
| 52 ); | 41 ); | 
| 53 | 42 | 
| 54 return directed; | 43 return directed; | 
| 55 } | 44 } | 
| 84 | 73 | 
| 85 var d = new Promise<T>(); | 74 var d = new Promise<T>(); | 
| 86 | 75 | 
| 87 that.Then( | 76 that.Then( | 
| 88 res => sync.Post(state => d.Resolve(res), null), | 77 res => sync.Post(state => d.Resolve(res), null), | 
| 89 err => sync.Post(state => d.Reject(err), null) | 78 err => { | 
| 79 sync.Post(state => d.Reject(err), null); | |
| 80 return default(T); | |
| 81 } | |
| 90 ); | 82 ); | 
| 91 | 83 | 
| 92 return d; | 84 return d; | 
| 93 } | 85 } | 
| 94 } | 86 } | 
