Skip to content

Commit 2e00779

Browse files
committed
Improve performance of chained tasks and avoid wrapping AggregateExceptions multiple times
1 parent 3ae981e commit 2e00779

13 files changed

Lines changed: 937 additions & 665 deletions

src/corelib/Core/CoreTaskExtensions.cs

Lines changed: 307 additions & 0 deletions
Large diffs are not rendered by default.

src/corelib/Core/ReadOnlyCollectionPageExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ public static Task<ReadOnlyCollection<T>> GetAllPagesAsync<T>(this ReadOnlyColle
9191

9292
// continue with the next page
9393
currentTask = getNextPage();
94-
currentTask.ContinueWith(continuation);
94+
currentTask.ContinueWith(continuation, TaskContinuationOptions.ExecuteSynchronously);
9595
};
96-
currentTask.ContinueWith(continuation);
96+
currentTask.ContinueWith(continuation, TaskContinuationOptions.ExecuteSynchronously);
9797

9898

9999
return taskCompletionSource.Task;

src/corelib/Providers/Rackspace/CloudAutoScaleProvider.cs

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ public Task<ReadOnlyCollectionPage<ScalingGroup>> ListScalingGroupsAsync(Scaling
107107
};
108108

109109
return AuthenticateServiceAsync(cancellationToken)
110-
.ContinueWith(prepareRequest)
111-
.ContinueWith(requestResource).Unwrap()
112-
.ContinueWith(resultSelector);
110+
.Select(prepareRequest)
111+
.SelectAsync(requestResource)
112+
.Select(resultSelector);
113113
}
114114

115115
/// <inheritdoc/>
@@ -142,9 +142,9 @@ public Task<ScalingGroup> CreateGroupAsync(ScalingGroupConfiguration configurati
142142
};
143143

144144
return AuthenticateServiceAsync(cancellationToken)
145-
.ContinueWith(prepareRequest).Unwrap()
146-
.ContinueWith(requestResource).Unwrap()
147-
.ContinueWith(resultSelector);
145+
.SelectAsync(prepareRequest)
146+
.SelectAsync(requestResource)
147+
.Select(resultSelector);
148148
}
149149

150150
/// <inheritdoc/>
@@ -177,9 +177,9 @@ public Task<ScalingGroup> GetGroupAsync(ScalingGroupId groupId, CancellationToke
177177
};
178178

179179
return AuthenticateServiceAsync(cancellationToken)
180-
.ContinueWith(prepareRequest)
181-
.ContinueWith(requestResource).Unwrap()
182-
.ContinueWith(resultSelector);
180+
.Select(prepareRequest)
181+
.SelectAsync(requestResource)
182+
.Select(resultSelector);
183183
}
184184

185185
/// <inheritdoc/>
@@ -200,8 +200,8 @@ public Task DeleteGroupAsync(ScalingGroupId groupId, bool? force, CancellationTo
200200
GetResponseAsyncFunc(cancellationToken);
201201

202202
return AuthenticateServiceAsync(cancellationToken)
203-
.ContinueWith(prepareRequest)
204-
.ContinueWith(requestResource).Unwrap();
203+
.Select(prepareRequest)
204+
.SelectAsync(requestResource);
205205
}
206206

207207
/// <inheritdoc/>
@@ -234,9 +234,9 @@ public Task<GroupState> GetGroupStateAsync(ScalingGroupId groupId, CancellationT
234234
};
235235

236236
return AuthenticateServiceAsync(cancellationToken)
237-
.ContinueWith(prepareRequest)
238-
.ContinueWith(requestResource).Unwrap()
239-
.ContinueWith(resultSelector);
237+
.Select(prepareRequest)
238+
.SelectAsync(requestResource)
239+
.Select(resultSelector);
240240
}
241241

242242
/// <inheritdoc/>
@@ -255,8 +255,8 @@ public Task PauseGroupAsync(ScalingGroupId groupId, CancellationToken cancellati
255255
GetResponseAsyncFunc(cancellationToken);
256256

257257
return AuthenticateServiceAsync(cancellationToken)
258-
.ContinueWith(prepareRequest)
259-
.ContinueWith(requestResource).Unwrap();
258+
.Select(prepareRequest)
259+
.SelectAsync(requestResource);
260260
}
261261

262262
/// <inheritdoc/>
@@ -275,8 +275,8 @@ public Task ResumeGroupAsync(ScalingGroupId groupId, CancellationToken cancellat
275275
GetResponseAsyncFunc(cancellationToken);
276276

277277
return AuthenticateServiceAsync(cancellationToken)
278-
.ContinueWith(prepareRequest)
279-
.ContinueWith(requestResource).Unwrap();
278+
.Select(prepareRequest)
279+
.SelectAsync(requestResource);
280280
}
281281

282282
/// <inheritdoc/>
@@ -309,9 +309,9 @@ public Task<GroupConfiguration> GetGroupConfigurationAsync(ScalingGroupId groupI
309309
};
310310

311311
return AuthenticateServiceAsync(cancellationToken)
312-
.ContinueWith(prepareRequest)
313-
.ContinueWith(requestResource).Unwrap()
314-
.ContinueWith(resultSelector);
312+
.Select(prepareRequest)
313+
.SelectAsync(requestResource)
314+
.Select(resultSelector);
315315
}
316316

317317
/// <inheritdoc/>
@@ -332,8 +332,8 @@ public Task SetGroupConfigurationAsync(ScalingGroupId groupId, GroupConfiguratio
332332
GetResponseAsyncFunc(cancellationToken);
333333

334334
return AuthenticateServiceAsync(cancellationToken)
335-
.ContinueWith(prepareRequest).Unwrap()
336-
.ContinueWith(requestResource).Unwrap();
335+
.SelectAsync(prepareRequest)
336+
.SelectAsync(requestResource);
337337
}
338338

339339
/// <inheritdoc/>
@@ -366,9 +366,9 @@ public Task<LaunchConfiguration> GetLaunchConfigurationAsync(ScalingGroupId grou
366366
};
367367

368368
return AuthenticateServiceAsync(cancellationToken)
369-
.ContinueWith(prepareRequest)
370-
.ContinueWith(requestResource).Unwrap()
371-
.ContinueWith(resultSelector);
369+
.Select(prepareRequest)
370+
.SelectAsync(requestResource)
371+
.Select(resultSelector);
372372
}
373373

374374
/// <inheritdoc/>
@@ -389,8 +389,8 @@ public Task SetLaunchConfigurationAsync(ScalingGroupId groupId, LaunchConfigurat
389389
GetResponseAsyncFunc(cancellationToken);
390390

391391
return AuthenticateServiceAsync(cancellationToken)
392-
.ContinueWith(prepareRequest).Unwrap()
393-
.ContinueWith(requestResource).Unwrap();
392+
.SelectAsync(prepareRequest)
393+
.SelectAsync(requestResource);
394394
}
395395

396396
/// <inheritdoc/>
@@ -439,9 +439,9 @@ public Task<ReadOnlyCollectionPage<Policy>> ListPoliciesAsync(ScalingGroupId gro
439439
};
440440

441441
return AuthenticateServiceAsync(cancellationToken)
442-
.ContinueWith(prepareRequest)
443-
.ContinueWith(requestResource).Unwrap()
444-
.ContinueWith(resultSelector);
442+
.Select(prepareRequest)
443+
.SelectAsync(requestResource)
444+
.Select(resultSelector);
445445
}
446446

447447
/// <inheritdoc/>
@@ -477,9 +477,9 @@ public Task<Policy> CreatePolicyAsync(ScalingGroupId groupId, PolicyConfiguratio
477477
};
478478

479479
return AuthenticateServiceAsync(cancellationToken)
480-
.ContinueWith(prepareRequest).Unwrap()
481-
.ContinueWith(requestResource).Unwrap()
482-
.ContinueWith(resultSelector);
480+
.SelectAsync(prepareRequest)
481+
.SelectAsync(requestResource)
482+
.Select(resultSelector);
483483
}
484484

485485
/// <inheritdoc/>
@@ -514,9 +514,9 @@ public Task<Policy> GetPolicyAsync(ScalingGroupId groupId, PolicyId policyId, Ca
514514
};
515515

516516
return AuthenticateServiceAsync(cancellationToken)
517-
.ContinueWith(prepareRequest)
518-
.ContinueWith(requestResource).Unwrap()
519-
.ContinueWith(resultSelector);
517+
.Select(prepareRequest)
518+
.SelectAsync(requestResource)
519+
.Select(resultSelector);
520520
}
521521

522522
/// <inheritdoc/>
@@ -539,8 +539,8 @@ public Task SetPolicyAsync(ScalingGroupId groupId, PolicyId policyId, PolicyConf
539539
GetResponseAsyncFunc(cancellationToken);
540540

541541
return AuthenticateServiceAsync(cancellationToken)
542-
.ContinueWith(prepareRequest).Unwrap()
543-
.ContinueWith(requestResource).Unwrap();
542+
.SelectAsync(prepareRequest)
543+
.SelectAsync(requestResource);
544544
}
545545

546546
/// <inheritdoc/>
@@ -561,8 +561,8 @@ public Task DeletePolicyAsync(ScalingGroupId groupId, PolicyId policyId, Cancell
561561
GetResponseAsyncFunc(cancellationToken);
562562

563563
return AuthenticateServiceAsync(cancellationToken)
564-
.ContinueWith(prepareRequest)
565-
.ContinueWith(requestResource).Unwrap();
564+
.Select(prepareRequest)
565+
.SelectAsync(requestResource);
566566
}
567567

568568
/// <inheritdoc/>
@@ -583,8 +583,8 @@ public Task ExecutePolicyAsync(ScalingGroupId groupId, PolicyId policyId, Cancel
583583
GetResponseAsyncFunc(cancellationToken);
584584

585585
return AuthenticateServiceAsync(cancellationToken)
586-
.ContinueWith(prepareRequest)
587-
.ContinueWith(requestResource).Unwrap();
586+
.Select(prepareRequest)
587+
.SelectAsync(requestResource);
588588
}
589589

590590
/// <inheritdoc/>
@@ -635,9 +635,9 @@ public Task<ReadOnlyCollectionPage<Webhook>> ListWebhooksAsync(ScalingGroupId gr
635635
};
636636

637637
return AuthenticateServiceAsync(cancellationToken)
638-
.ContinueWith(prepareRequest)
639-
.ContinueWith(requestResource).Unwrap()
640-
.ContinueWith(resultSelector);
638+
.Select(prepareRequest)
639+
.SelectAsync(requestResource)
640+
.Select(resultSelector);
641641
}
642642

643643
/// <inheritdoc/>
@@ -675,9 +675,9 @@ public Task<Webhook> CreateWebhookAsync(ScalingGroupId groupId, PolicyId policyI
675675
};
676676

677677
return AuthenticateServiceAsync(cancellationToken)
678-
.ContinueWith(prepareRequest).Unwrap()
679-
.ContinueWith(requestResource).Unwrap()
680-
.ContinueWith(resultSelector);
678+
.SelectAsync(prepareRequest)
679+
.SelectAsync(requestResource)
680+
.Select(resultSelector);
681681
}
682682

683683
/// <inheritdoc/>
@@ -719,9 +719,9 @@ public Task<ReadOnlyCollection<Webhook>> CreateWebhookRangeAsync(ScalingGroupId
719719
};
720720

721721
return AuthenticateServiceAsync(cancellationToken)
722-
.ContinueWith(prepareRequest).Unwrap()
723-
.ContinueWith(requestResource).Unwrap()
724-
.ContinueWith(resultSelector);
722+
.SelectAsync(prepareRequest)
723+
.SelectAsync(requestResource)
724+
.Select(resultSelector);
725725
}
726726

727727
/// <inheritdoc/>
@@ -758,9 +758,9 @@ public Task<Webhook> GetWebhookAsync(ScalingGroupId groupId, PolicyId policyId,
758758
};
759759

760760
return AuthenticateServiceAsync(cancellationToken)
761-
.ContinueWith(prepareRequest)
762-
.ContinueWith(requestResource).Unwrap()
763-
.ContinueWith(resultSelector);
761+
.Select(prepareRequest)
762+
.SelectAsync(requestResource)
763+
.Select(resultSelector);
764764
}
765765

766766
/// <inheritdoc/>
@@ -785,8 +785,8 @@ public Task UpdateWebhookAsync(ScalingGroupId groupId, PolicyId policyId, Webhoo
785785
GetResponseAsyncFunc(cancellationToken);
786786

787787
return AuthenticateServiceAsync(cancellationToken)
788-
.ContinueWith(prepareRequest).Unwrap()
789-
.ContinueWith(requestResource).Unwrap();
788+
.SelectAsync(prepareRequest)
789+
.SelectAsync(requestResource);
790790
}
791791

792792
/// <inheritdoc/>
@@ -809,8 +809,8 @@ public Task DeleteWebhookAsync(ScalingGroupId groupId, PolicyId policyId, Webhoo
809809
GetResponseAsyncFunc(cancellationToken);
810810

811811
return AuthenticateServiceAsync(cancellationToken)
812-
.ContinueWith(prepareRequest)
813-
.ContinueWith(requestResource).Unwrap();
812+
.Select(prepareRequest)
813+
.SelectAsync(requestResource);
814814
}
815815

816816
#endregion

0 commit comments

Comments
 (0)