##// END OF EJS Templates
Refactoring
cin -
r66:790e8a997d30 default
parent child
Show More
@@ -0,0 +1,31
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace Implab
7 {
8 public interface IPromise<T>: IPromise
9 {
10
11 new T Join();
12 new T Join(int timeout);
13
14 IPromise<T> Then(ResultHandler<T> success, ErrorHandler error);
15 IPromise<T> Then(ResultHandler<T> success, ErrorHandler<T> error);
16 IPromise<T> Then(ResultHandler<T> success);
17 new IPromise<T> Error(ErrorHandler error);
18 IPromise<T> Error(ErrorHandler<T> error);
19
20 IPromise<T2> Map<T2>(ResultMapper<T,T2> mapper, ErrorHandler error);
21 IPromise<T2> Map<T2>(ResultMapper<T, T2> mapper);
22
23 IPromise<T2> Chain<T2>(ChainedOperation<T, T2> chained, ErrorHandler error);
24 IPromise<T2> Chain<T2>(ChainedOperation<T, T2> chained);
25
26 new IPromise<T> Cancelled(Action handler);
27 new IPromise<T> Finally(Action handler);
28 new IPromise<T> Anyway(Action handler);
29
30 }
31 }
@@ -16,8 +16,8 namespace Implab.Diagnostics.Interactive
16 16 SynchronizationContext m_syncGuiThread;
17 17 readonly Promise<object> m_guiStarted = new Promise<object>();
18 18
19 readonly IPromiseBase m_guiFinished;
20 readonly IPromiseBase m_workerFinished = new Promise<object>();
19 readonly IPromise m_guiFinished;
20 readonly IPromise m_workerFinished = new Promise<object>();
21 21
22 22 readonly MTQueue<TraceViewItem> m_queue = new MTQueue<TraceViewItem>();
23 23 readonly AutoResetEvent m_queueEvent = new AutoResetEvent(false);
@@ -211,7 +211,7 namespace Implab.Diagnostics {
211 211 }
212 212 }
213 213
214 public void BindLogicalOperationToPromise(IPromiseBase promise) {
214 public void BindLogicalOperationToPromise(IPromise promise) {
215 215 Safe.ArgumentNotNull(promise, "promise");
216 216
217 217 var ctx = DetachLogicalOperation();
@@ -28,7 +28,7 namespace Implab.Diagnostics {
28 28 }
29 29
30 30 [Conditional("TRACE")]
31 public static void BindLogicalOperationToPromise(IPromiseBase promise) {
31 public static void BindLogicalOperationToPromise(IPromise promise) {
32 32 TraceContext.Current.BindLogicalOperationToPromise(promise);
33 33 }
34 34
@@ -3,29 +3,35 using System.Collections.Generic;
3 3 using System.Linq;
4 4 using System.Text;
5 5
6 namespace Implab
7 {
8 public interface IPromise<T>: IPromiseBase
9 {
6 namespace Implab {
7 public interface IPromise: ICancellable {
8 /// <summary>
9 /// Check whereather the promise has no more than one dependent promise.
10 /// </summary>
11 bool IsExclusive {
12 get;
13 }
10 14
11 new T Join();
12 new T Join(int timeout);
15 /// <summary>
16 /// Тип результата, получаемого через данное обещание.
17 /// </summary>
18 Type PromiseType { get; }
13 19
14 IPromise<T> Then(ResultHandler<T> success, ErrorHandler error);
15 IPromise<T> Then(ResultHandler<T> success, ErrorHandler<T> error);
16 IPromise<T> Then(ResultHandler<T> success);
17 new IPromise<T> Error(ErrorHandler error);
18 IPromise<T> Error(ErrorHandler<T> error);
20 bool IsResolved { get; }
21
22 bool IsCancelled { get; }
19 23
20 IPromise<T2> Map<T2>(ResultMapper<T,T2> mapper, ErrorHandler error);
21 IPromise<T2> Map<T2>(ResultMapper<T, T2> mapper);
24 IPromise Then(Action success,ErrorHandler error);
25 IPromise Then(Action success);
26 IPromise Error(ErrorHandler error);
27 IPromise Anyway(Action handler);
28 IPromise Finally(Action handler);
29 IPromise Cancelled(Action handler);
22 30
23 IPromise<T2> Chain<T2>(ChainedOperation<T, T2> chained, ErrorHandler error);
24 IPromise<T2> Chain<T2>(ChainedOperation<T, T2> chained);
31 IPromise<T> Cast<T>();
25 32
26 new IPromise<T> Cancelled(Action handler);
27 new IPromise<T> Finally(Action handler);
28 new IPromise<T> Anyway(Action handler);
33 void Join();
34 void Join(int timeout);
29 35
30 36 }
31 37 }
@@ -51,8 +51,8
51 51 <Compile Include="ICancellable.cs" />
52 52 <Compile Include="IProgressHandler.cs" />
53 53 <Compile Include="IProgressNotifier.cs" />
54 <Compile Include="IPromiseT.cs" />
54 55 <Compile Include="IPromise.cs" />
55 <Compile Include="IPromiseBase.cs" />
56 56 <Compile Include="IServiceLocator.cs" />
57 57 <Compile Include="ITaskController.cs" />
58 58 <Compile Include="JSON\JSONElementContext.cs" />
@@ -48,7 +48,7 namespace Implab.Parallels {
48 48 }
49 49
50 50
51 public static IPromiseBase InvokeNewThread(Action func) {
51 public static IPromise InvokeNewThread(Action func) {
52 52 var p = new Promise<object>();
53 53
54 54 var caller = TraceContext.Snapshot();
@@ -99,7 +99,7 namespace Implab {
99 99 m_cancellable = true;
100 100 }
101 101
102 public Promise(IPromiseBase parent, bool cancellable) {
102 public Promise(IPromise parent, bool cancellable) {
103 103 m_cancellable = cancellable;
104 104 if (parent != null)
105 105 AddHandler(
@@ -252,11 +252,11 namespace Implab {
252 252 return medium;
253 253 }
254 254
255 public IPromiseBase Then(Action success, ErrorHandler error) {
255 public IPromise Then(Action success, ErrorHandler error) {
256 256 return Then(x => success(), error);
257 257 }
258 258
259 public IPromiseBase Then(Action success) {
259 public IPromise Then(Action success) {
260 260 return Then(x => success());
261 261 }
262 262
@@ -682,7 +682,7 namespace Implab {
682 682 /// <remarks>
683 683 /// Если в коллекции встречаюься <c>null</c>, то они воспринимаются как выполненные обещания.
684 684 /// </remarks>
685 public static IPromiseBase CreateComposite(ICollection<IPromiseBase> promises) {
685 public static IPromise CreateComposite(ICollection<IPromise> promises) {
686 686 if (promises == null)
687 687 throw new ArgumentNullException();
688 688 if (promises.Count == 0)
@@ -730,27 +730,27 namespace Implab {
730 730
731 731 #region IPromiseBase explicit implementation
732 732
733 IPromiseBase IPromiseBase.Error(ErrorHandler error) {
733 IPromise IPromise.Error(ErrorHandler error) {
734 734 return Error(error);
735 735 }
736 736
737 IPromiseBase IPromiseBase.Anyway(Action handler) {
737 IPromise IPromise.Anyway(Action handler) {
738 738 return Anyway(handler);
739 739 }
740 740
741 IPromiseBase IPromiseBase.Finally(Action handler) {
741 IPromise IPromise.Finally(Action handler) {
742 742 return Finally(handler);
743 743 }
744 744
745 IPromiseBase IPromiseBase.Cancelled(Action handler) {
745 IPromise IPromise.Cancelled(Action handler) {
746 746 return Cancelled(handler);
747 747 }
748 748
749 void IPromiseBase.Join() {
749 void IPromise.Join() {
750 750 Join();
751 751 }
752 752
753 void IPromiseBase.Join(int timeout) {
753 void IPromise.Join(int timeout) {
754 754 Join(timeout);
755 755 }
756 756
@@ -3,6 +3,7 using System.Collections.Generic;
3 3 using System.Linq;
4 4 using System.Text;
5 5 using System.Text.RegularExpressions;
6 using System.Diagnostics;
6 7
7 8 namespace Implab
8 9 {
@@ -36,5 +37,30 namespace Implab
36 37 if (disp != null)
37 38 disp.Dispose();
38 39 }
40
41 [DebuggerStepThrough]
42 public static IPromise<T> GuargPromise<T>(Func<T> action) {
43 ArgumentNotNull(action, "action");
44
45 var p = new Promise<T>();
46 try {
47 p.Resolve(action());
48 } catch (Exception err) {
49 p.Reject(err);
50 }
51
52 return p;
53 }
54
55 [DebuggerStepThrough]
56 public static IPromise<T> GuardPromise<T>(Func<IPromise<T>> action) {
57 ArgumentNotNull(action, "action");
58
59 try {
60 return action();
61 } catch (Exception err) {
62 return Promise<T>.ExceptionToPromise(err);
39 63 }
40 64 }
65 }
66 }
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now