Auto status change to "Under Review"
The requested changes are too big and content was truncated. Show full diff
@@ -1,6 +1,7 | |||||
1 | using System; |
|
1 | using System; | |
2 | using System.Collections.Generic; |
|
2 | using System.Collections.Generic; | |
3 | using System.Diagnostics; |
|
3 | using System.Diagnostics; | |
|
4 | using System.Dynamic; | |||
4 | using System.Linq; |
|
5 | using System.Linq; | |
5 | using Implab.Components; |
|
6 | using Implab.Components; | |
6 | using Implab.Diagnostics; |
|
7 | using Implab.Diagnostics; | |
@@ -91,11 +92,13 namespace Implab.Playground { | |||||
91 | static void Main(string[] args) { |
|
92 | static void Main(string[] args) { | |
92 | var u1 = new Uri("/some/one"); |
|
93 | var u1 = new Uri("/some/one"); | |
93 |
|
94 | |||
94 | Console.WriteLine($"{u1.IsAbsoluteUri}: {u1}"); |
|
95 | dynamic obj = new ExpandoObject(); | |
|
96 | ||||
|
97 | obj.Name = "Dynamo"; | |||
95 |
|
98 | |||
96 | var u2 = new Uri(u1, "../../two"); |
|
99 | obj.Hello = new Func<string>(() => { return "Hello"; }); | |
97 |
|
100 | |||
98 |
Console.WriteLine($"{ |
|
101 | Console.WriteLine($"{obj.Hello()}"); | |
99 |
|
102 | |||
100 | } |
|
103 | } | |
101 |
|
104 |
1 | NO CONTENT: file renamed from Implab.ServiceHost/docs/XmlConfiguration.md to Implab.ServiceHost/docs/XmlConfiguration.ru.md |
|
NO CONTENT: file renamed from Implab.ServiceHost/docs/XmlConfiguration.md to Implab.ServiceHost/docs/XmlConfiguration.ru.md |
@@ -46,6 +46,10 namespace Implab.Components { | |||||
46 |
|
46 | |||
47 | protected override async Task StopInternalAsync(CancellationToken ct) { |
|
47 | protected override async Task StopInternalAsync(CancellationToken ct) { | |
48 | // component in Stopping state, no new polls will be scheduled |
|
48 | // component in Stopping state, no new polls will be scheduled | |
|
49 | ||||
|
50 | // we do not need additional synchronization logic here | |||
|
51 | // since RunnableComponent already done this | |||
|
52 | ||||
49 | m_cancellation.Cancel(); |
|
53 | m_cancellation.Cancel(); | |
50 | try { |
|
54 | try { | |
51 | // await for pending poll |
|
55 | // await for pending poll | |
@@ -59,7 +63,10 namespace Implab.Components { | |||||
59 | protected abstract Task Poll(CancellationToken ct); |
|
63 | protected abstract Task Poll(CancellationToken ct); | |
60 |
|
64 | |||
61 | void ScheduleNextPoll(int timeout) { |
|
65 | void ScheduleNextPoll(int timeout) { | |
|
66 | // access and modification of the component state | |||
|
67 | // in custom methods requires a synchronization | |||
62 | lock (SynchronizationObject) { |
|
68 | lock (SynchronizationObject) { | |
|
69 | ||||
63 | if (State == ExecutionState.Running) { |
|
70 | if (State == ExecutionState.Running) { | |
64 | m_pending = Safe.CreateTask(m_cancellation.Token); |
|
71 | m_pending = Safe.CreateTask(m_cancellation.Token); | |
65 | m_poll = m_pending.Then(() => Poll(m_cancellation.Token)); |
|
72 | m_poll = m_pending.Then(() => Poll(m_cancellation.Token)); | |
@@ -70,10 +77,16 namespace Implab.Components { | |||||
70 |
|
77 | |||
71 | async void OnTimer(object state) { |
|
78 | async void OnTimer(object state) { | |
72 | try { |
|
79 | try { | |
|
80 | // changes to m_pending and m_poll are done | |||
|
81 | // only in ScheduleNextPoll method, hence we | |||
|
82 | // can safely use them here | |||
73 | m_pending.Start(); |
|
83 | m_pending.Start(); | |
74 | await m_poll; |
|
84 | await m_poll; | |
|
85 | ||||
|
86 | // schedule next poll | |||
75 | ScheduleNextPoll(Interval); |
|
87 | ScheduleNextPoll(Interval); | |
76 | } catch (Exception e) { |
|
88 | } catch (Exception e) { | |
|
89 | // hanle error | |||
77 | UnhandledException.DispatchEvent(this, new UnhandledExceptionEventArgs(e, false)); |
|
90 | UnhandledException.DispatchEvent(this, new UnhandledExceptionEventArgs(e, false)); | |
78 |
|
91 | |||
79 | if (FailOnError) |
|
92 | if (FailOnError) |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
General Comments 3
ok, latest stable version should be in default
You need to be logged in to leave comments.
Login now