Skip to content

Commit c98e340

Browse files
author
Jann Roder
authored
Merge pull request #29 from roederja2/transaction_scope_fix
Suppress any possible ambient transaction scope
2 parents e34ada8 + 1ab4c97 commit c98e340

7 files changed

Lines changed: 45 additions & 57 deletions

File tree

.travis.yml

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,16 @@
11
language: csharp
2-
32
sudo: required
4-
5-
os: linux
6-
7-
dist: trusty
3+
dist: xenial
84

95
branches:
106
except:
117
- /^[0-9]/
128

13-
dotnet: 2.1.4
9+
dotnet: 3.1
1410
mono: none
15-
16-
addons:
17-
apt:
18-
sources:
19-
- sourceline: 'deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main'
20-
key_url: 'https://packages.microsoft.com/keys/microsoft.asc'
21-
packages:
22-
- dotnet-hostfxr-1.0.1
23-
- dotnet-sharedframework-microsoft.netcore.app-1.1.6
11+
12+
install:
13+
- dotnet restore
2414

2515
script:
2616
- (git fetch --unshallow 2>/dev/null || echo "Already full repo.")
@@ -29,4 +19,4 @@ script:
2919
notifications:
3020
on_success: always
3121
on_failure: always
32-
on_start: always
22+
on_start: always

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ These can be found in the [USAGE](USAGE.md) file.
4343
The following platforms are supported:
4444

4545
- .NET Core
46-
- .NET 4.5.1
46+
- .NET 4.6.2
4747

4848
## Installation
4949

@@ -52,7 +52,7 @@ library.
5252

5353
## Building
5454

55-
Currently version `1.0` of the [.NET Core build tools](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/) is required to build the source code.
55+
Currently version `2.0` of the [.NET Core build tools](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/) is required to build the source code.
5656
To build from Visual Studio you'll need VS 2017.
5757

5858
Assuming you have the .NET Core build tools installed, building the library from the command-line just involves:

Winton.Extensions.Threading.Actor.Tests.Unit/Winton.Extensions.Threading.Actor.Tests.Unit.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netcoreapp1.1;netcoreapp2.0;net462</TargetFrameworks>
4+
<TargetFrameworks>netcoreapp2.0;net462</TargetFrameworks>
55
<SignAssembly>True</SignAssembly>
66
<DelaySign>False</DelaySign>
77
<AssemblyOriginatorKeyFile>../keys/Winton.Extensions.Threading.Actor.snk</AssemblyOriginatorKeyFile>

Winton.Extensions.Threading.Actor.Tests.Utilities/Winton.Extensions.Threading.Actor.Tests.Utilities.csproj

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<Copyright>Copyright © 2017 Winton</Copyright>
55
<Authors>Jos Hickson</Authors>
6-
<TargetFrameworks>net451;netstandard1.3;netstandard2.0</TargetFrameworks>
6+
<TargetFramework>netstandard2.0</TargetFramework>
77
<NoWarn>$(NoWarn);CS1591</NoWarn>
88
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
99
<AssemblyName>Winton.Extensions.Threading.Actor.Tests.Utilities</AssemblyName>
@@ -20,17 +20,4 @@
2020
<PackageReference Include="FluentAssertions" Version="4.19.4" />
2121
</ItemGroup>
2222

23-
<ItemGroup Condition=" '$(TargetFramework)' == 'net451' ">
24-
<Reference Include="System" />
25-
<Reference Include="Microsoft.CSharp" />
26-
</ItemGroup>
27-
28-
<PropertyGroup Condition=" '$(TargetFramework)' == 'net451' ">
29-
<DebugType>full</DebugType>
30-
</PropertyGroup>
31-
32-
<ItemGroup Condition="'$(TargetFramework)' != 'net451'">
33-
<PackageReference Include="System.Threading.Thread" Version="4.3.0" />
34-
</ItemGroup>
35-
3623
</Project>

Winton.Extensions.Threading.Actor/Internal/ActorTaskFactory.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Threading;
33
using System.Threading.Tasks;
4+
using System.Transactions;
45

56
namespace Winton.Extensions.Threading.Actor.Internal
67
{
@@ -17,7 +18,22 @@ public Task StartNew(Action action, CancellationToken cancellationToken, TaskCre
1718
ActorTask.CurrentActorTaskTraits = traits;
1819
ActorTask.CurrentCanceller = cancellationTokenSource;
1920

20-
return Task.Factory.StartNew(action, cancellationTokenSource.Token, taskCreationOptions | TaskCreationOptions.HideScheduler, _scheduler);
21+
void TransactionScopeWrapper(Action theAction)
22+
{
23+
using (var scope = new TransactionScope(TransactionScopeOption.Suppress, TransactionScopeAsyncFlowOption.Enabled))
24+
{
25+
try
26+
{
27+
theAction();
28+
}
29+
finally
30+
{
31+
scope.Complete();
32+
}
33+
}
34+
}
35+
36+
return Task.Factory.StartNew(() => TransactionScopeWrapper(action), cancellationTokenSource.Token, taskCreationOptions | TaskCreationOptions.HideScheduler, _scheduler);
2137
}
2238

2339
public Task<T> StartNew<T>(Func<T> function, CancellationToken cancellationToken, TaskCreationOptions taskCreationOptions, ActorTaskTraits traits = ActorTaskTraits.None)
@@ -27,7 +43,22 @@ public Task<T> StartNew<T>(Func<T> function, CancellationToken cancellationToken
2743
ActorTask.CurrentActorTaskTraits = traits;
2844
ActorTask.CurrentCanceller = cancellationTokenSource;
2945

30-
return Task.Factory.StartNew(function, cancellationTokenSource.Token, taskCreationOptions | TaskCreationOptions.HideScheduler, _scheduler);
46+
T TransactionScopeWrapper(Func<T> theFunction)
47+
{
48+
using (var scope = new TransactionScope(TransactionScopeOption.Suppress, TransactionScopeAsyncFlowOption.Enabled))
49+
{
50+
try
51+
{
52+
return theFunction();
53+
}
54+
finally
55+
{
56+
scope.Complete();
57+
}
58+
}
59+
}
60+
61+
return Task.Factory.StartNew(() => TransactionScopeWrapper(function), cancellationTokenSource.Token, taskCreationOptions | TaskCreationOptions.HideScheduler, _scheduler);
3162
}
3263
}
3364
}

Winton.Extensions.Threading.Actor/Winton.Extensions.Threading.Actor.csproj

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<PropertyGroup>
66
<Copyright>Copyright © 2017 Winton</Copyright>
77
<Authors>Jos Hickson</Authors>
8-
<TargetFrameworks>net451;netstandard1.3;netstandard2.0</TargetFrameworks>
8+
<TargetFramework>netstandard2.0</TargetFramework>
99
<NoWarn>$(NoWarn);CS1591</NoWarn>
1010
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1111
<WarningsNotAsErrors>$(WarningsNotAsErrors);CS1030</WarningsNotAsErrors>
@@ -28,22 +28,4 @@
2828
<LangVersion>latest</LangVersion>
2929
</PropertyGroup>
3030

31-
<ItemGroup Condition=" '$(TargetFramework)' == 'net451' ">
32-
<Reference Include="System" />
33-
<Reference Include="Microsoft.CSharp" />
34-
</ItemGroup>
35-
36-
<PropertyGroup Condition=" '$(TargetFramework)' == 'net451' ">
37-
<DebugType>full</DebugType>
38-
</PropertyGroup>
39-
40-
<PropertyGroup Condition=" '$(TargetFramework)' != 'net451' ">
41-
<DebugType>portable</DebugType>
42-
</PropertyGroup>
43-
44-
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
45-
<PackageReference Include="System.Threading.Thread" Version="4.3.0" />
46-
<PackageReference Include="System.Threading.ThreadPool" Version="4.3.0" />
47-
</ItemGroup>
48-
4931
</Project>

build.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,11 @@ dotnet clean
2121
echo
2222

2323
echo "Building ..."
24-
dotnet build ./Winton.Extensions.Threading.Actor/Winton.Extensions.Threading.Actor.csproj --configuration Release --framework netstandard1.3
2524
dotnet build ./Winton.Extensions.Threading.Actor/Winton.Extensions.Threading.Actor.csproj --configuration Release --framework netstandard2.0
2625
echo
2726

2827
echo "Testing ..."
29-
dotnet test ./Winton.Extensions.Threading.Actor.Tests.Unit/Winton.Extensions.Threading.Actor.Tests.Unit.csproj --configuration Release --framework netcoreapp2.0
30-
dotnet test ./Winton.Extensions.Threading.Actor.Tests.Unit/Winton.Extensions.Threading.Actor.Tests.Unit.csproj --configuration Release --framework netcoreapp1.1
28+
dotnet test ./Winton.Extensions.Threading.Actor.Tests.Unit/Winton.Extensions.Threading.Actor.Tests.Unit.csproj --configuration Release --framework netcoreapp3.1
3129
echo
3230

3331
if [ "${TRAVIS:-}" != "true" ]; then

0 commit comments

Comments
 (0)