Skip to content

Commit 70868c6

Browse files
Task.CompletedTask vs Task.FromResult vs return: retarget net10.0, drop redundant async, add notification handler example (#2208)
- Retarget both projects from net7.0 to net10.0 - Bump Microsoft.NET.Test.Sdk to 18.10.1, xunit to 2.9.3, xunit.runner.visualstudio to 4.0.0, coverlet.collector to 10.0.1 - UseTaskFromResultAsync() drops async/await and returns Task.FromResult(message) directly - Remove UseTaskCompletedSync() and UseTaskFromResultSync(), and their calls in Program.cs - Add INotificationHandler and ConsoleNotificationHandler, the imposed-signature case for Task.CompletedTask - Add two tests asserting both factory-returned tasks are already complete without being awaited
1 parent 40d5096 commit 70868c6

8 files changed

Lines changed: 45 additions & 26 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace TaskCompletedVsTaskFromResultVsReturnInCSharp;
2+
3+
public class ConsoleNotificationHandler : INotificationHandler
4+
{
5+
public Task HandleAsync(string message)
6+
{
7+
Console.WriteLine(message);
8+
9+
return Task.CompletedTask;
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace TaskCompletedVsTaskFromResultVsReturnInCSharp;
2+
3+
public interface INotificationHandler
4+
{
5+
Task HandleAsync(string message);
6+
}

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/TaskCompletedVsTaskFromResultVsReturnInCSharp/Program.cs‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
var taskCompletedClass = new TaskCompletedHandler();
44
await taskCompletedClass.UseTaskCompletedAsync();
5-
taskCompletedClass.UseTaskCompletedSync();
65

76
var taskFromResultClass = new TaskFromResultHandler();
87
await taskFromResultClass.UseTaskFromResultAsync();
9-
taskFromResultClass.UseTaskFromResultSync();
108

119
var returnClass = new ReturnHandler();
1210
await returnClass.UseReturnAsync();

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/TaskCompletedVsTaskFromResultVsReturnInCSharp/TaskCompletedHandler.cs‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,4 @@ public Task UseTaskCompletedAsync()
88

99
return Task.CompletedTask;
1010
}
11-
12-
public void UseTaskCompletedSync()
13-
{
14-
Console.WriteLine("Performing a synchronous work.");
15-
16-
Task.CompletedTask.Wait();
17-
}
1811
}

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/TaskCompletedVsTaskFromResultVsReturnInCSharp/TaskCompletedVsTaskFromResultVsReturnInCSharp.csproj‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net10.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/TaskCompletedVsTaskFromResultVsReturnInCSharp/TaskFromResultHandler.cs‎

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,12 @@
22

33
public class TaskFromResultHandler
44
{
5-
public async Task<string> UseTaskFromResultAsync()
5+
public Task<string> UseTaskFromResultAsync()
66
{
77
Console.WriteLine("Not performing any asynchronous work but returning a result.");
88

99
var message = "Hello, world!";
1010

11-
return await Task.FromResult(message);
12-
}
13-
14-
public string UseTaskFromResultSync()
15-
{
16-
Console.WriteLine("Performing a synchronous work.");
17-
18-
var message = "Hello, world!";
19-
20-
return Task.FromResult(message).Result;
11+
return Task.FromResult(message);
2112
}
2213
}

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/Tests/TaskCompletedVsTaskFromResultVsReturnInCSharpTests.csproj‎

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

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77

@@ -10,13 +10,13 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
14-
<PackageReference Include="xunit" Version="2.4.2" />
15-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.10.1" />
14+
<PackageReference Include="xunit" Version="2.9.3" />
15+
<PackageReference Include="xunit.runner.visualstudio" Version="4.0.0">
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
<PrivateAssets>all</PrivateAssets>
1818
</PackageReference>
19-
<PackageReference Include="coverlet.collector" Version="3.1.2">
19+
<PackageReference Include="coverlet.collector" Version="10.0.1">
2020
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2121
<PrivateAssets>all</PrivateAssets>
2222
</PackageReference>

‎async-csharp/TaskCompletedTaskFromResultVsReturnInCSharp/Tests/TaskCompletedVsTaskFromResultVsReturnTests.cs‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,24 @@ public async Task WhenCallingUseReturnAsync_ThenUseReturn()
3131

3232
Assert.Equal(20, result);
3333
}
34+
35+
[Fact]
36+
public void WhenCallingUseTaskFromResultAsync_ThenTaskIsAlreadyComplete()
37+
{
38+
var taskFromResultClass = new TaskFromResultHandler();
39+
40+
var result = taskFromResultClass.UseTaskFromResultAsync();
41+
42+
Assert.True(result.IsCompletedSuccessfully);
43+
}
44+
45+
[Fact]
46+
public void WhenCallingHandleAsync_ThenTaskIsAlreadyComplete()
47+
{
48+
INotificationHandler handler = new ConsoleNotificationHandler();
49+
50+
var result = handler.HandleAsync("Order 42 shipped.");
51+
52+
Assert.True(result.IsCompletedSuccessfully);
53+
}
3454
}

0 commit comments

Comments
 (0)