Mercurial > pub > ImplabNet
diff Implab/TaskHelpers.cs @ 251:7c7e9ad6fe4a v3
Prerelease version of RunnableComponent
Added draft messaging interfaces
Added more more helpers to Xml/SerializationHelpers
author | cin |
---|---|
date | Sun, 11 Feb 2018 00:49:51 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/TaskHelpers.cs Sun Feb 11 00:49:51 2018 +0300 @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; + +namespace Implab { + public static class TaskHelpers { + + public static async Task Then(this Task that, Action fulfilled, Action<Exception> rejected) { + Safe.ArgumentNotNull(that, nameof(that)); + if (rejected != null) { + try { + await that; + } catch (Exception e) { + rejected(e); + return; + } + } else { + await that; + } + + if (fulfilled != null) + fulfilled(); + } + + public static async Task Then(this Task that, Action fulfilled) { + Safe.ArgumentNotNull(that, nameof(that)); + await that; + if (fulfilled != null) + fulfilled(); + } + + public static async Task Then(this Task that, Func<Task> fulfilled) { + Safe.ArgumentNotNull(that, nameof(that)); + await that; + if (fulfilled != null) + await fulfilled(); + } + + public static async Task Finally(this Task that, Action handler) { + Safe.ArgumentNotNull(that, nameof(that)); + try { + await that; + } finally { + if (handler != null) + handler(); + } + } + + public static async void Then(this Task that, IResolvable next) { + try { + await that; + } catch (Exception e) { + next.Reject(e); + return; + } + next.Resolve(); + } + + public static async void Then<T>(this Task<T> that, IResolvable<T> next) { + T result; + try { + result = await that; + } catch (Exception e) { + next.Reject(e); + return; + } + next.Resolve(result); + } + + } +} \ No newline at end of file