@@ -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 IPromise |
|
|
20 |
readonly IPromise |
|
|
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(IPromise |
|
|
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(IPromise |
|
|
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 |
|
|
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 IPromise |
|
|
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(IPromise |
|
|
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 IPromise |
|
|
255 | public IPromise Then(Action success, ErrorHandler error) { | |
|
256 | 256 | return Then(x => success(), error); |
|
257 | 257 | } |
|
258 | 258 | |
|
259 |
public IPromise |
|
|
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 IPromise |
|
|
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 |
IPromise |
|
|
733 | IPromise IPromise.Error(ErrorHandler error) { | |
|
734 | 734 | return Error(error); |
|
735 | 735 | } |
|
736 | 736 | |
|
737 |
IPromise |
|
|
737 | IPromise IPromise.Anyway(Action handler) { | |
|
738 | 738 | return Anyway(handler); |
|
739 | 739 | } |
|
740 | 740 | |
|
741 |
IPromise |
|
|
741 | IPromise IPromise.Finally(Action handler) { | |
|
742 | 742 | return Finally(handler); |
|
743 | 743 | } |
|
744 | 744 | |
|
745 |
IPromise |
|
|
745 | IPromise IPromise.Cancelled(Action handler) { | |
|
746 | 746 | return Cancelled(handler); |
|
747 | 747 | } |
|
748 | 748 | |
|
749 |
void IPromise |
|
|
749 | void IPromise.Join() { | |
|
750 | 750 | Join(); |
|
751 | 751 | } |
|
752 | 752 | |
|
753 |
void IPromise |
|
|
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