File tree Expand file tree Collapse file tree 3 files changed +32
-29
lines changed
src/LLL.DurableTask.Worker Expand file tree Collapse file tree 3 files changed +32
-29
lines changed Original file line number Diff line number Diff line change 66using DurableTask . Core ;
77using DurableTask . Core . Serializing ;
88using LLL . DurableTask . Core . Serializing ;
9+ using LLL . DurableTask . Worker . Utils ;
910using Newtonsoft . Json . Linq ;
1011
1112namespace LLL . DurableTask . Worker . Orchestrations ;
@@ -87,21 +88,7 @@ private object[] PrepareParameters(
8788
8889 private async Task < string > SerializeResult ( object result )
8990 {
90- if ( result is Task task )
91- {
92- if ( _methodInfo . ReturnType . IsGenericType )
93- {
94- result = await ( dynamic ) task ;
95- }
96- else
97- {
98- await task ;
99- result = null ;
100- }
101- }
102-
103- var serializedResult = _dataConverter . Serialize ( result ) ;
104-
105- return serializedResult ;
91+ var awaitedResult = await TaskUtils . MaybeAwait ( result , _methodInfo . ReturnType ) ;
92+ return _dataConverter . Serialize ( awaitedResult ) ;
10693 }
10794}
Original file line number Diff line number Diff line change 66using DurableTask . Core ;
77using DurableTask . Core . Serializing ;
88using LLL . DurableTask . Core . Serializing ;
9+ using LLL . DurableTask . Worker . Utils ;
910
1011namespace LLL . DurableTask . Worker . Orchestrations ;
1112
@@ -92,20 +93,9 @@ private object[] PrepareParameters(
9293
9394 private async Task < string > SerializeResult ( object result )
9495 {
95- if ( result is Task task )
96- {
97- if ( _methodInfo . ReturnType . IsGenericType )
98- {
99- result = await ( dynamic ) task ;
100- }
101- else
102- {
103- await task ;
104- result = null ;
105- }
106- }
96+ var awaitedResult = await TaskUtils . MaybeAwait ( result , _methodInfo . ReturnType ) ;
10797
108- var serializedResult = _dataConverter . Serialize ( result ) ;
98+ var serializedResult = _dataConverter . Serialize ( awaitedResult ) ;
10999
110100 return serializedResult ;
111101 }
Original file line number Diff line number Diff line change 1+ using System ;
2+ using System . Runtime . CompilerServices ;
3+ using System . Threading . Tasks ;
4+
5+ namespace LLL . DurableTask . Worker . Utils ;
6+
7+ internal static class TaskUtils
8+ {
9+ public static async Task < object > MaybeAwait ( dynamic result , Type returnType )
10+ {
11+ var getAwaiterMethod = returnType . GetMethod ( nameof ( Task . GetAwaiter ) ) ;
12+ if ( getAwaiterMethod is null )
13+ return result ;
14+
15+ var getResultMethod = getAwaiterMethod . ReturnType . GetMethod ( nameof ( TaskAwaiter < object > . GetResult ) ) ;
16+ if ( getResultMethod is not null && getResultMethod . ReturnType != typeof ( void ) )
17+ {
18+ return await result ;
19+ }
20+ else
21+ {
22+ await result ;
23+ return null ;
24+ }
25+ }
26+ }
You can’t perform that action at this time.
0 commit comments