##// END OF EJS Templates
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)...
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete) Implab.ServiceHost: rewritten TypeReference (added support for nested types), stable API

File last commit:

r251:7c7e9ad6fe4a v3
r278:6691aff01de1 v3
Show More
TaskHelpers.cs
69 lines | 1.9 KiB | text/x-csharp | CSharpLexer
cin
Prerelease version of RunnableComponent...
r251 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);
}
}
}