Init
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace QFSW.QC.Actions
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts an async Task into an action.
|
||||
/// </summary>
|
||||
public class Async : ICommandAction
|
||||
{
|
||||
private readonly Task _task;
|
||||
|
||||
public bool IsFinished => _task.IsCompleted ||
|
||||
_task.IsCanceled ||
|
||||
_task.IsFaulted;
|
||||
public bool StartsIdle => false;
|
||||
|
||||
/// <param name="task">The async Task to convert.</param>
|
||||
public Async(Task task)
|
||||
{
|
||||
_task = task;
|
||||
}
|
||||
|
||||
public void Start(ActionContext context) { }
|
||||
|
||||
public void Finalize(ActionContext context)
|
||||
{
|
||||
if (_task.IsFaulted)
|
||||
{
|
||||
throw _task.Exception.InnerException;
|
||||
}
|
||||
if (_task.IsCanceled)
|
||||
{
|
||||
throw new TaskCanceledException();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts an async Task into an action.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The return type of the Task to convert.</typeparam>
|
||||
public class Async<T> : ICommandAction
|
||||
{
|
||||
private readonly Task<T> _task;
|
||||
private readonly Action<T> _onResult;
|
||||
|
||||
public bool IsFinished => _task.IsCompleted ||
|
||||
_task.IsCanceled ||
|
||||
_task.IsFaulted;
|
||||
public bool StartsIdle => false;
|
||||
|
||||
/// <param name="task">The async Task to convert.</param>
|
||||
/// <param name="onResult">The action to invoke when the Task completes.</param>
|
||||
public Async(Task<T> task, Action<T> onResult)
|
||||
{
|
||||
_task = task;
|
||||
_onResult = onResult;
|
||||
}
|
||||
|
||||
public void Start(ActionContext context) { }
|
||||
|
||||
public void Finalize(ActionContext context)
|
||||
{
|
||||
if (_task.IsFaulted)
|
||||
{
|
||||
throw _task.Exception.InnerException;
|
||||
}
|
||||
if (_task.IsCanceled)
|
||||
{
|
||||
throw new TaskCanceledException();
|
||||
}
|
||||
|
||||
_onResult(_task.Result);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user