var waiter = HP.UtilsLib.TaskAwaiterHelper.GetTaskAwaiter(
async () =>
{
return await feedBack(version, Email, EmailContent).ConfigureAwait(false);
}
);
var result = waiter.GetResult();
waiter.Dispose();
--------------------------------------------------------------------------------------------------
public interface ITaskAwaiter<TResult>: IDisposable
TResult GetResult();
void Await();
public interface ITaskAwaiter: IDisposable
public static class TaskAwaiterHelper
private class TaskAwaiter<TResult> : ITaskAwaiter<TResult>
{
private ManualResetEvent waiter = new ManualResetEvent(false);
public TaskAwaiter(Func<TResult> function)
{
Task.Run(
() => {
result=function();
waiter.Set();
}
);
}
public TaskAwaiter(Func<Task<TResult>> function)
async () =>
{
result = await function().ConfigureAwait(false);
waiter.Set();
private TResult result;
public void Await()
waiter.WaitOne();
}
public TResult GetResult()
Await();
return result;
public void Dispose()
waiter.Dispose();
private class TaskAwaiter : ITaskAwaiter
private ManualResetEvent waiter = new ManualResetEvent(false);
public TaskAwaiter(Action action)
Task.Run(
() => {
action();
}
);
}
public TaskAwaiter(Func<Task> function)
Task.Run(
async () => {
await function().ConfigureAwait(false);
waiter.Set();
}
);
public void Await()
waiter.WaitOne();
public void Dispose()
public static ITaskAwaiter<TResult> GetTaskAwaiter<TResult>(Func<TResult> function)
TaskAwaiter<TResult> taskAwaiter = new TaskAwaiter<TResult>(function);
return taskAwaiter;
public static ITaskAwaiter GetTaskAwaiter(Func<Task> function)
TaskAwaiter taskAwaiter = new TaskAwaiter(function);
public static ITaskAwaiter<TResult> GetTaskAwaiter<TResult>(Func<Task<TResult>> function)
public static ITaskAwaiter GetTaskAwaiter(Action function)