Skip to content

Commit 9758aff

Browse files
author
Jann Roder
committed
Suppress any possible ambient transaction scope which may exist on the thread pool
1 parent e34ada8 commit 9758aff

4 files changed

Lines changed: 36 additions & 36 deletions

File tree

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>

0 commit comments

Comments
 (0)