From 327154e2f7c78722f450e38596714b9a6fffc8de Mon Sep 17 00:00:00 2001 From: cptjazz Date: Sat, 22 Jun 2019 12:01:32 +0200 Subject: [PATCH] Update README.md Add new stackable async methods --- README.md | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bfbe251..e952754 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,23 @@ int s = n.OrElse(() => 456); // 456 ### Async/Await Support +:information_source: The async/await support has been greatly revised in the 2.x series. The basic usage pattern stays the same, except: +* `Map(..)`, `MapAsync(..)`, `OrElse(..)`, and `OrElseAsync(..)` are now stackable. Previously many intermediate `await`s had to be used and the code looked rather cluttered, +* `ValueTask` is used as a return value where appropriate, +* `ValueTask` overloads for `MapAsync(..)` have been removed in favour of the more general `Task`-based variant. + + The binding (`Map(..)`) and alternative (`OrElse(..)`) methods are also available in async variants: ```C# Maybe m = Maybe.From(123); Maybe r1 = await m.MapAsync(async () => Maybe.From("A")); -Maybe r2 = await m.MapAsync(() => new ValueTask(Maybe.From("A"))); + +var r2 = await Maybe + .From(55) + .MapAsync(async x => Maybe.From(66)) + .MapAsync(async x => Maybe.From(77)) + .Map(x => Maybe.From(88)); ``` And @@ -73,11 +84,16 @@ And ```C# Maybe m = Maybe.From(123); int r1 = await m.OrElseAsync(async () => 456); // 123 -int r2 = await m.OrElseAsync(() => new ValueTask(456)); // 123 Maybe n = Maybe.Nothing(); int s1 = await n.OrElseAsync(async () => 456); // 456 -int s2 = await n.OrElseAsync(() => new ValueTask(456)); // 456 + +var r2 = await Maybe + .From(55) + .MapAsync(async x => Maybe.From(66)) + .MapAsync(async x => Maybe.From(77)) + .Map(x => Maybe.From(88)) + .OrElse(99); ``` ### Infrastructure methods