Skip to content

Commit b5d34b6

Browse files
author
Oren (electricessence)
committed
Wired up missing GiveAsync logic that would include recycling and giving to 'pocket'.
1 parent c26dff6 commit b5d34b6

3 files changed

Lines changed: 19 additions & 9 deletions

File tree

source/ObjectPoolBase.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ protected void OnGivenTo(bool wasGiven)
6868

6969
public void Give(T item)
7070
{
71-
if (PrepareToReceive(item) && (GaveToPocket(ref item) || Receive(item)))
71+
if (PrepareToReceive(item)
72+
&& (GaveToPocket(ref item) || Receive(item)))
7273
OnGivenTo();
7374
}
7475

@@ -77,11 +78,19 @@ protected virtual Task<bool> GiveInternalAsync(T item)
7778
return Task.Run(() => Receive(item));
7879
}
7980

80-
public virtual Task GiveAsync(T item)
81+
public Task GiveAsync(T item)
8182
{
82-
if (item == null) return Task.FromResult(false);
83-
return GiveInternalAsync(item)
84-
.ContinueWith(t => OnGivenTo(t.Result));
83+
// We need to pre-check CanReceive because excessive tasks could build up if not.
84+
if (item == null || !CanReceive) return Task.CompletedTask;
85+
86+
return GiveAsyncConditional(item);
87+
}
88+
89+
async Task GiveAsyncConditional(T item)
90+
{
91+
if(PrepareToReceive(item)
92+
&& (GaveToPocket(ref item) || await GiveInternalAsync(item)))
93+
OnGivenTo();
8594
}
8695

8796
public virtual T Take()

source/Open.Disposable.ObjectPools.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ Part of the "Open" set of libraries.</Description>
1616
<RepositoryType>git</RepositoryType>
1717
<PackageTags>objectpool, dotnet, dotnetcore, cs, idisposable, threadsafe, thread-safe</PackageTags>
1818
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
19-
<Version>1.0.1</Version>
19+
<Version>1.0.2</Version>
2020
<AssemblyVersion>1.1.0.0</AssemblyVersion>
2121
<FileVersion>1.1.0.0</FileVersion>
22+
<PackageReleaseNotes>Wired up missing GiveAsync logic that would include recycling and giving to 'pocket'.</PackageReleaseNotes>
2223
</PropertyGroup>
2324

2425
<ItemGroup>

tests/Open.Disposable.ObjectPools.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
10-
<PackageReference Include="MSTest.TestAdapter" Version="1.1.11" />
11-
<PackageReference Include="MSTest.TestFramework" Version="1.1.11" />
9+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0-preview-20171012-09" />
10+
<PackageReference Include="MSTest.TestAdapter" Version="1.2.0" />
11+
<PackageReference Include="MSTest.TestFramework" Version="1.2.0" />
1212
</ItemGroup>
1313

1414
<ItemGroup>

0 commit comments

Comments
 (0)