@@ -15,12 +15,17 @@ public static class ResultTaskExtensions
15
15
/// <param name="resultTask"></param>
16
16
/// <param name="ok"></param>
17
17
/// <param name="error"></param>
18
+ /// <param name="cancellationToken"></param>
18
19
/// <returns></returns>
19
20
public static async Task < U > MatchAsync < T , TError , U > (
20
21
this Task < Result < T , TError > > resultTask ,
21
22
Func < T , Task < U > > ok ,
22
- Func < TError , Task < U > > error ) =>
23
- await ( await resultTask ) . Match ( ok , error ) ;
23
+ Func < TError , Task < U > > error ,
24
+ CancellationToken ? cancellationToken = null )
25
+ {
26
+ var option = await resultTask . WaitOrCancel ( cancellationToken ) ;
27
+ return await option . Match ( ok , error ) . WaitOrCancel ( cancellationToken ) ;
28
+ }
24
29
25
30
/// <summary>
26
31
/// If Result is Ok evaluate the ok delegate, otherwise error.
@@ -31,12 +36,14 @@ public static async Task<U> MatchAsync<T, TError, U>(
31
36
/// <param name="resultTask"></param>
32
37
/// <param name="ok"></param>
33
38
/// <param name="error"></param>
39
+ /// <param name="cancellationToken"></param>
34
40
/// <returns></returns>
35
41
public static async Task < U > MatchAsync < T , TError , U > (
36
42
this Task < Result < T , TError > > resultTask ,
37
43
Func < T , U > ok ,
38
- Func < TError , U > error ) =>
39
- ( await resultTask ) . Match ( ok , error ) ;
44
+ Func < TError , U > error ,
45
+ CancellationToken ? cancellationToken = null ) =>
46
+ ( await resultTask . WaitOrCancel ( cancellationToken ) ) . Match ( ok , error ) ;
40
47
41
48
/// <summary>
42
49
/// Evaluates the bind delegate if Result is Ok otherwise return Error.
@@ -46,11 +53,13 @@ public static async Task<U> MatchAsync<T, TError, U>(
46
53
/// <typeparam name="U"></typeparam>
47
54
/// <param name="resultTask"></param>
48
55
/// <param name="bind"></param>
56
+ /// <param name="cancellationToken"></param>
49
57
/// <returns></returns>
50
58
public static Task < Result < U , TError > > BindAsync < T , TError , U > (
51
59
this Task < Result < T , TError > > resultTask ,
52
- Func < T , Result < U , TError > > bind ) =>
53
- resultTask . MatchAsync ( x => bind ( x ) , Result < U , TError > . Error ) ;
60
+ Func < T , Result < U , TError > > bind ,
61
+ CancellationToken ? cancellationToken = null ) =>
62
+ resultTask . MatchAsync ( x => bind ( x ) , Result < U , TError > . Error , cancellationToken ) ;
54
63
55
64
/// <summary>
56
65
/// Evaluates the bind delegate if Result is Ok otherwise return Error.
@@ -60,11 +69,13 @@ public static Task<Result<U, TError>> BindAsync<T, TError, U>(
60
69
/// <typeparam name="U"></typeparam>
61
70
/// <param name="resultTask"></param>
62
71
/// <param name="bind"></param>
72
+ /// <param name="cancellationToken"></param>
63
73
/// <returns></returns>
64
74
public static Task < Result < U , TError > > BindAsync < T , TError , U > (
65
75
this Task < Result < T , TError > > resultTask ,
66
- Func < T , Task < Result < U , TError > > > bind ) =>
67
- resultTask . MatchAsync ( bind , Result < U , TError > . ErrorAsync ) ;
76
+ Func < T , Task < Result < U , TError > > > bind ,
77
+ CancellationToken ? cancellationToken = null ) =>
78
+ resultTask . MatchAsync ( bind , Result < U , TError > . ErrorAsync , cancellationToken ) ;
68
79
69
80
/// <summary>
70
81
/// Evaluates the map delegate if Result is Ok otherwise return Error.
@@ -74,11 +85,13 @@ public static Task<Result<U, TError>> BindAsync<T, TError, U>(
74
85
/// <typeparam name="U"></typeparam>
75
86
/// <param name="resultTask"></param>
76
87
/// <param name="map"></param>
88
+ /// <param name="cancellationToken"></param>
77
89
/// <returns></returns>
78
90
public static Task < Result < U , TError > > MapAsync < T , TError , U > (
79
91
this Task < Result < T , TError > > resultTask ,
80
- Func < T , U > map ) =>
81
- resultTask . BindAsync ( x => Result < U , TError > . Ok ( map ( x ) ) ) ;
92
+ Func < T , U > map ,
93
+ CancellationToken ? cancellationToken = null ) =>
94
+ resultTask . BindAsync ( x => Result < U , TError > . Ok ( map ( x ) ) , cancellationToken ) ;
82
95
83
96
/// <summary>
84
97
/// Evaluates the map delegate if Result is Ok otherwise return Error.
@@ -88,11 +101,13 @@ public static Task<Result<U, TError>> MapAsync<T, TError, U>(
88
101
/// <typeparam name="U"></typeparam>
89
102
/// <param name="resultTask"></param>
90
103
/// <param name="map"></param>
104
+ /// <param name="cancellationToken"></param>
91
105
/// <returns></returns>
92
106
public static Task < Result < U , TError > > MapAsync < T , TError , U > (
93
107
this Task < Result < T , TError > > resultTask ,
94
- Func < T , Task < U > > map ) =>
95
- resultTask . BindAsync ( x => Result < U , TError > . OkAsync ( map ( x ) ) ) ;
108
+ Func < T , Task < U > > map ,
109
+ CancellationToken ? cancellationToken = null ) =>
110
+ resultTask . BindAsync ( x => Result < U , TError > . OkAsync ( map ( x ) ) , cancellationToken ) ;
96
111
97
112
/// <summary>
98
113
/// Evaluates the mapError delegate if Result is Error otherwise return Ok.
@@ -101,24 +116,28 @@ public static Task<Result<U, TError>> MapAsync<T, TError, U>(
101
116
/// <typeparam name="UError"></typeparam>
102
117
/// <param name="resultTask"></param>
103
118
/// <param name="mapError"></param>
119
+ /// <param name="cancellationToken"></param>
104
120
/// <returns></returns>
105
121
public static Task < Result < T , UError > > MapErrorAsync < T , UError > (
106
122
this Task < Result < T , UError > > resultTask ,
107
- Func < UError , UError > mapError ) =>
108
- resultTask . MatchAsync ( Result < T , UError > . Ok , e => Result < T , UError > . Error ( mapError ( e ) ) ) ;
123
+ Func < UError , UError > mapError ,
124
+ CancellationToken ? cancellationToken = null ) =>
125
+ resultTask . MatchAsync ( Result < T , UError > . Ok , e => Result < T , UError > . Error ( mapError ( e ) ) , cancellationToken ) ;
109
126
110
- /// <summary>
127
+ /// <summary>
111
128
/// Evaluates the mapError delegate if Result is Error otherwise return Ok.
112
129
/// </summary>
113
130
/// <typeparam name="T"></typeparam>
114
131
/// <typeparam name="UError"></typeparam>
115
132
/// <param name="resultTask"></param>
116
133
/// <param name="mapError"></param>
134
+ /// <param name="cancellationToken"></param>
117
135
/// <returns></returns>
118
136
public static Task < Result < T , UError > > MapErrorAsync < T , UError > (
119
137
this Task < Result < T , UError > > resultTask ,
120
- Func < UError , Task < UError > > mapError ) =>
121
- resultTask . MatchAsync ( Result < T , UError > . OkAsync , e => Result < T , UError > . ErrorAsync ( mapError ( e ) ) ) ;
138
+ Func < UError , Task < UError > > mapError ,
139
+ CancellationToken ? cancellationToken = null ) =>
140
+ resultTask . MatchAsync ( Result < T , UError > . OkAsync , e => Result < T , UError > . ErrorAsync ( mapError ( e ) ) , cancellationToken ) ;
122
141
123
142
/// <summary>
124
143
/// Returns the value of Result if it is T, otherwise returns the
@@ -128,11 +147,13 @@ public static Task<Result<T, UError>> MapErrorAsync<T, UError>(
128
147
/// <typeparam name="TError"></typeparam>
129
148
/// <param name="resultTask"></param>
130
149
/// <param name="defaultValue"></param>
150
+ /// <param name="cancellationToken"></param>
131
151
/// <returns></returns>
132
152
public static Task < T > DefaultValueAsync < T , TError > (
133
153
this Task < Result < T , TError > > resultTask ,
134
- T defaultValue ) =>
135
- resultTask . MatchAsync ( ok => ok , _ => defaultValue ) ;
154
+ T defaultValue ,
155
+ CancellationToken ? cancellationToken = null ) =>
156
+ resultTask . MatchAsync ( ok => ok , _ => defaultValue , cancellationToken ) ;
136
157
137
158
/// <summary>
138
159
/// Returns the value of Result if it is T, otherwise returns the
@@ -142,11 +163,13 @@ public static Task<T> DefaultValueAsync<T, TError>(
142
163
/// <typeparam name="TError"></typeparam>
143
164
/// <param name="resultTask"></param>
144
165
/// <param name="defaultValue"></param>
166
+ /// <param name="cancellationToken"></param>
145
167
/// <returns></returns>
146
168
public static Task < T > DefaultValueAsync < T , TError > (
147
169
this Task < Result < T , TError > > resultTask ,
148
- Task < T > defaultValue ) =>
149
- resultTask . MatchAsync ( some => Task . FromResult ( some ) , _ => defaultValue ) ;
170
+ Task < T > defaultValue ,
171
+ CancellationToken ? cancellationToken = null ) =>
172
+ resultTask . MatchAsync ( some => Task . FromResult ( some ) , _ => defaultValue , cancellationToken ) ;
150
173
151
174
/// <summary>
152
175
/// Returns the value of Result if it is T, otherwise returns the
@@ -156,11 +179,13 @@ public static Task<T> DefaultValueAsync<T, TError>(
156
179
/// <typeparam name="TError"></typeparam>
157
180
/// <param name="resultTask"></param>
158
181
/// <param name="defaultWith"></param>
182
+ /// <param name="cancellationToken"></param>
159
183
/// <returns></returns>
160
184
public static Task < T > DefaultWithAsync < T , TError > (
161
185
this Task < Result < T , TError > > resultTask ,
162
- Func < Task < T > > defaultWith ) =>
163
- resultTask . MatchAsync ( ok => Task . FromResult ( ok ) , _ => defaultWith ( ) ) ;
186
+ Func < Task < T > > defaultWith ,
187
+ CancellationToken ? cancellationToken = null ) =>
188
+ resultTask . MatchAsync ( ok => Task . FromResult ( ok ) , _ => defaultWith ( ) , cancellationToken ) ;
164
189
165
190
/// <summary>
166
191
/// Returns the value of Result if it is T, otherwise returns the
@@ -170,9 +195,11 @@ public static Task<T> DefaultWithAsync<T, TError>(
170
195
/// <typeparam name="TError"></typeparam>
171
196
/// <param name="resultTask"></param>
172
197
/// <param name="defaultWith"></param>
198
+ /// <param name="cancellationToken"></param>
173
199
/// <returns></returns>
174
200
public static Task < T > DefaultWithAsync < T , TError > (
175
201
this Task < Result < T , TError > > resultTask ,
176
- Func < T > defaultWith ) =>
177
- resultTask . MatchAsync ( ok => ok , _ => defaultWith ( ) ) ;
202
+ Func < T > defaultWith ,
203
+ CancellationToken ? cancellationToken = null ) =>
204
+ resultTask . MatchAsync ( ok => ok , _ => defaultWith ( ) , cancellationToken ) ;
178
205
}
0 commit comments