##// END OF EJS Templates
minor fixes
cin -
r260:547a2fc0d93e v3.0.6 v3
parent child
Show More
@@ -0,0 +1,35
1 using System;
2 using System.Threading;
3 using System.Threading.Tasks;
4 using Implab.Components;
5
6 namespace Implab.Test {
7 public class MockPollComponent : PollingComponent {
8
9 public Func<CancellationToken,Task> PollWorker { get; set;}
10
11 public Func<CancellationToken, Task> StartWorker { get; set; }
12
13 public Func<CancellationToken, Task> StopWorker { get; set; }
14
15 public MockPollComponent(bool initialized) : base(initialized) {
16 }
17
18 protected async override Task Poll(CancellationToken ct) {
19 if(PollWorker!= null)
20 await PollWorker.Invoke(ct);
21 }
22
23 protected async override Task StopInternalAsync(CancellationToken ct) {
24 if (StopWorker != null)
25 await StopWorker.Invoke(ct);
26 }
27
28 protected async override Task StartInternalAsync(CancellationToken ct) {
29 if (StartWorker != null)
30 await StartWorker.Invoke(ct);
31 }
32
33
34 }
35 } No newline at end of file
@@ -1,69 +1,20
1 <?xml version="1.0" encoding="utf-8"?>
1 <Project Sdk="Microsoft.NET.Sdk">
2 <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2 <PropertyGroup Condition="'$(OSTYPE)'=='linux'">
3 <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
3 <TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
4 <PropertyGroup>
4 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46'">/usr/lib/mono/4.6-api/</FrameworkPathOverride>
5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7 <ProjectGuid>{100DFEB0-75BE-436F-ADDF-1F46EF433F46}</ProjectGuid>
8 <OutputType>Exe</OutputType>
9 <AppDesignerFolder>Properties</AppDesignerFolder>
10 <RootNamespace>Implab.Playground</RootNamespace>
11 <AssemblyName>Implab.Playground</AssemblyName>
12 <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
13 <FileAlignment>512</FileAlignment>
14 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
15 <TargetFrameworkProfile />
16 </PropertyGroup>
5 </PropertyGroup>
17 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
6
18 <PlatformTarget>AnyCPU</PlatformTarget>
7 <PropertyGroup Condition="'$(OSTYPE)'=='windows'">
19 <DebugSymbols>true</DebugSymbols>
8 <TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
20 <DebugType>full</DebugType>
21 <Optimize>false</Optimize>
22 <OutputPath>bin\Debug\</OutputPath>
23 <DefineConstants>DEBUG;TRACE</DefineConstants>
24 <ErrorReport>prompt</ErrorReport>
25 <WarningLevel>4</WarningLevel>
26 </PropertyGroup>
9 </PropertyGroup>
27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
10
28 <PlatformTarget>AnyCPU</PlatformTarget>
11 <PropertyGroup>
29 <DebugType>pdbonly</DebugType>
12 <OutputType>Exe</OutputType>
30 <Optimize>true</Optimize>
13 <IsPackable>false</IsPackable>
31 <OutputPath>bin\Release\</OutputPath>
32 <DefineConstants>TRACE</DefineConstants>
33 <ErrorReport>prompt</ErrorReport>
34 <WarningLevel>4</WarningLevel>
35 <Prefer32Bit>true</Prefer32Bit>
36 <DebugSymbols>true</DebugSymbols>
37 </PropertyGroup>
14 </PropertyGroup>
38 <ItemGroup>
15
39 <Reference Include="System" />
40 <Reference Include="System.Core" />
41 <Reference Include="System.Xml.Linq" />
42 <Reference Include="System.Data.DataSetExtensions" />
43 <Reference Include="Microsoft.CSharp" />
44 <Reference Include="System.Data" />
45 <Reference Include="System.Net.Http" />
46 <Reference Include="System.Xml" />
47 </ItemGroup>
48 <ItemGroup>
16 <ItemGroup>
49 <Compile Include="Program.cs" />
17 <ProjectReference Include="../Implab/Implab.csproj"/>
50 <Compile Include="Properties\AssemblyInfo.cs" />
51 </ItemGroup>
52 <ItemGroup>
53 <None Include="App.config" />
54 </ItemGroup>
18 </ItemGroup>
55 <ItemGroup>
19
56 <ProjectReference Include="..\Implab\Implab.csproj">
20 </Project>
57 <Project>{f550f1f8-8746-4ad0-9614-855f4c4b7f05}</Project>
58 <Name>Implab</Name>
59 </ProjectReference>
60 </ItemGroup>
61 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
62 <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
63 Other similar extension points exist, see Microsoft.Common.targets.
64 <Target Name="BeforeBuild">
65 </Target>
66 <Target Name="AfterBuild">
67 </Target>
68 -->
69 </Project> No newline at end of file
@@ -15,7 +15,6 using System.Xml.Serialization;
15
15
16 namespace Implab.Playground {
16 namespace Implab.Playground {
17 using System.Diagnostics;
17 using System.Diagnostics;
18 using System.Runtime.Remoting.Messaging;
19 using static Trace<Program>;
18 using static Trace<Program>;
20
19
21 public class Program {
20 public class Program {
@@ -1,8 +1,14
1 <Project Sdk="Microsoft.NET.Sdk">
1 <Project Sdk="Microsoft.NET.Sdk">
2 <PropertyGroup Condition="'$(OSTYPE)'=='linux'">
3 <TargetFrameworks>netcoreapp2.0</TargetFrameworks>
4 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46'">/usr/lib/mono/4.5/</FrameworkPathOverride>
5 </PropertyGroup>
6
7 <PropertyGroup Condition="'$(OSTYPE)'=='windows'">
8 <TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
9 </PropertyGroup>
2
10
3 <PropertyGroup>
11 <PropertyGroup>
4 <TargetFramework>netcoreapp2.1</TargetFramework>
5
6 <IsPackable>false</IsPackable>
12 <IsPackable>false</IsPackable>
7 </PropertyGroup>
13 </PropertyGroup>
8
14
@@ -13,5 +19,5
13 <ProjectReference Include="../Implab/Implab.csproj"/>
19 <ProjectReference Include="../Implab/Implab.csproj"/>
14 <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
20 <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
15 </ItemGroup>
21 </ItemGroup>
16
22
17 </Project>
23 </Project>
@@ -4,38 +4,26 using System.Threading.Tasks;
4 using Implab.Components;
4 using Implab.Components;
5 using Xunit;
5 using Xunit;
6
6
7 namespace Implab.Test
7 namespace Implab.Test {
8 {
9 class TimeLog : PollingComponent {
10 public TimeLog() : base(true) {
11 }
12
8
13 protected override Task Poll(CancellationToken ct) {
9 public class RunnableComponentTests {
14 Console.WriteLine("Poll");
15 return Task.CompletedTask;
16 }
17 }
18
19 public class UnitTest1
20 {
21 [Fact]
10 [Fact]
22 public async Task Test1()
11 public async Task Test1() {
23 {
24
12
25 using(var tl = new TimeLog()) {
13 using (var m = new MockPollComponent(true)) {
26 tl.StateChanged += (self, args) => Console.WriteLine("{0}", args.State);
14 m.StartWorker = async (ct) => await Task.Yield();
27 tl.Delay = 1000;
15 m.StopWorker = async (ct) => await Task.Yield();
28 tl.Interval = 500;
29
16
17 Assert.Equal(ExecutionState.Ready, m.State);
18 Assert.NotNull(m.Completion);
30
19
31 tl.Start(CancellationToken.None);
20 m.Start(CancellationToken.None);
32 await tl.Completion;
21 await m.Completion;
22 Assert.Equal(ExecutionState.Running, m.State);
33
23
34 await Task.Delay(2000);
24 m.Stop(CancellationToken.None);
35
25 await m.Completion;
36 tl.Stop(CancellationToken.None);
26 Assert.Equal(ExecutionState.Stopped, m.State);
37 await tl.Completion;
38 await Task.Delay(3000);
39 }
27 }
40 }
28 }
41 }
29 }
@@ -50,7 +50,7 namespace Implab.Components {
50 try {
50 try {
51 // await for pending poll
51 // await for pending poll
52 await m_poll;
52 await m_poll;
53 } catch (OperationCanceledException e) {
53 } catch (OperationCanceledException) {
54 // OK
54 // OK
55 }
55 }
56 }
56 }
@@ -71,12 +71,16 namespace Implab.Components {
71 try {
71 try {
72 m_pending.Start();
72 m_pending.Start();
73 await m_poll;
73 await m_poll;
74 ScheduleNextPoll(Interval);
74 } catch (Exception e) {
75 } catch (Exception e) {
75 UnhandledException.DispatchEvent(this, new UnhandledExceptionEventArgs(e, false));
76 UnhandledException.DispatchEvent(this, new UnhandledExceptionEventArgs(e, false));
77
76 if (FailOnError)
78 if (FailOnError)
77 Fail(e);
79 Fail(e);
80 else
81 ScheduleNextPoll(Interval);
78 }
82 }
79 ScheduleNextPoll(Interval);
83
80 }
84 }
81
85
82 protected override void Dispose(bool disposing) {
86 protected override void Dispose(bool disposing) {
@@ -319,6 +319,7 namespace Implab.Components {
319 MoveSuccess(cookie);
319 MoveSuccess(cookie);
320 } catch (Exception e) {
320 } catch (Exception e) {
321 MoveFailed(e, cookie);
321 MoveFailed(e, cookie);
322 throw;
322 }
323 }
323 }, ct);
324 }, ct);
324
325
@@ -13,7 +13,7 namespace Implab {
13 m_promise = new Promise();
13 m_promise = new Promise();
14 }
14 }
15
15
16 internal Deferred(Promise promise, IDispatcher dispatcher) {
16 internal Deferred(Promise promise) {
17 Debug.Assert(promise != null);
17 Debug.Assert(promise != null);
18 m_promise = promise;
18 m_promise = promise;
19 }
19 }
@@ -8,9 +8,12
8 and SharedLock, Trace helpers on top of System.Diagnostics, ObjectPool etc.
8 and SharedLock, Trace helpers on top of System.Diagnostics, ObjectPool etc.
9 </Description>
9 </Description>
10 <Copyright>2012-2018 Sergey Smirnov</Copyright>
10 <Copyright>2012-2018 Sergey Smirnov</Copyright>
11 <LicenseUrl>https://opensource.org/licenses/BSD-2-Clause</LicenseUrl>
11 <Version>3.0.6</Version>
12 <ProjectUrl>https://implab.org</ProjectUrl>
12 <PackageLicenseUrl>https://opensource.org/licenses/BSD-2-Clause</PackageLicenseUrl>
13 <PackageProjectUrl>https://implab.org</PackageProjectUrl>
13 <RepositoryUrl>https://hg.implab.org/pub/ImplabNet/</RepositoryUrl>
14 <RepositoryUrl>https://hg.implab.org/pub/ImplabNet/</RepositoryUrl>
15 <RepositoryType>mercurial</RepositoryType>
16 <PackageTags>IMPLAB;Json pull-parser;Json Xml;async;diagnostics;serialization;</PackageTags>
14 <TargetFrameworks>netstandard2.0;net46</TargetFrameworks>
17 <TargetFrameworks>netstandard2.0;net46</TargetFrameworks>
15 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46' and '$(OSTYPE)'=='linux'">/usr/lib/mono/4.5/</FrameworkPathOverride>
18 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46' and '$(OSTYPE)'=='linux'">/usr/lib/mono/4.5/</FrameworkPathOverride>
16 <DefineConstants Condition="'$(TargetFramework)'=='net46'">NETFX_TRACE_BUG;$(DefineConstants)</DefineConstants>
19 <DefineConstants Condition="'$(TargetFramework)'=='net46'">NETFX_TRACE_BUG;$(DefineConstants)</DefineConstants>
@@ -2,6 +2,7
2 using System.Collections.Generic;
2 using System.Collections.Generic;
3 using System.Diagnostics;
3 using System.Diagnostics;
4 using System.Reflection;
4 using System.Reflection;
5 using System.Threading;
5 using System.Threading.Tasks;
6 using System.Threading.Tasks;
6 using Implab.Parallels;
7 using Implab.Parallels;
7
8
@@ -152,31 +153,44 namespace Implab {
152 }
153 }
153
154
154 public static IPromise Create(PromiseExecutor executor) {
155 public static IPromise Create(PromiseExecutor executor) {
155 Safe.ArgumentNotNull(executor, nameof(executor));
156 return Create(executor, CancellationToken.None);
157 }
156
158
157 var p = new Promise();
159 public static IPromise Create(PromiseExecutor executor, CancellationToken ct) {
158 var d = new Deferred(p, DefaultDispatcher);
160 Safe.ArgumentNotNull(executor, nameof(executor));
159
161 if (!ct.CanBeCanceled)
162 return Create(executor);
163
164 var d = new Deferred();
165
166 ct.Register(d.Cancel);
167
160 try {
168 try {
161 executor(d);
169 if (!ct.IsCancellationRequested)
162 } catch (Exception e) {
170 executor(d);
171 } catch(Exception e) {
163 d.Reject(e);
172 d.Reject(e);
164 }
173 }
165
166 return d.Promise;
174 return d.Promise;
167 }
175 }
168
176
169 public static IPromise<T> Create<T>(PromiseExecutor<T> executor) {
177 public static IPromise<T> Create<T>(PromiseExecutor<T> executor) {
178 return Create(executor, CancellationToken.None);
179 }
180
181 public static IPromise<T> Create<T>(PromiseExecutor<T> executor, CancellationToken ct) {
170 Safe.ArgumentNotNull(executor, nameof(executor));
182 Safe.ArgumentNotNull(executor, nameof(executor));
171
183
172 var d = new Deferred<T>();
184 var d = new Deferred<T>();
173
185
186 ct.Register(d.Cancel);
187
174 try {
188 try {
175 executor(d);
189 if (!ct.IsCancellationRequested)
176 } catch (Exception e) {
190 executor(d);
191 } catch(Exception e) {
177 d.Reject(e);
192 d.Reject(e);
178 }
193 }
179
180 return d.Promise;
194 return d.Promise;
181 }
195 }
182
196
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 3
Under Review
author

Auto status change to "Under Review"

Approved
author

ok, latest stable version should be in default

You need to be logged in to leave comments. Login now