Add progress and status result overloads

This commit is contained in:
Patrik Svensson 2021-01-06 09:46:11 +01:00 committed by Patrik Svensson
parent 11e192e750
commit 3a593857c8
2 changed files with 37 additions and 12 deletions

View File

@ -68,6 +68,18 @@ namespace Spectre.Console
task.GetAwaiter().GetResult();
}
/// <summary>
/// Starts the progress task list and returns a result.
/// </summary>
/// <typeparam name="T">The result type.</typeparam>
/// <param name="func">he action to execute.</param>
/// <returns>The result.</returns>
public T Start<T>(Func<ProgressContext, T> func)
{
var task = StartAsync(ctx => Task.FromResult(func(ctx)));
return task.GetAwaiter().GetResult();
}
/// <summary>
/// Starts the progress task list.
/// </summary>
@ -82,13 +94,13 @@ namespace Spectre.Console
_ = await StartAsync<object?>(async progressContext =>
{
await action(progressContext);
await action(progressContext).ConfigureAwait(false);
return default;
});
}).ConfigureAwait(false);
}
/// <summary>
/// Starts the progress task list.
/// Starts the progress task list and returns a result.
/// </summary>
/// <param name="action">The action to execute.</param>
/// <typeparam name="T">The result type of task.</typeparam>

View File

@ -52,6 +52,19 @@ namespace Spectre.Console
task.GetAwaiter().GetResult();
}
/// <summary>
/// Starts a new status display.
/// </summary>
/// <typeparam name="T">The result type.</typeparam>
/// <param name="status">The status to display.</param>
/// <param name="func">he action to execute.</param>
/// <returns>The result.</returns>
public T Start<T>(string status, Func<StatusContext, T> func)
{
var task = StartAsync(status, ctx => Task.FromResult(func(ctx)));
return task.GetAwaiter().GetResult();
}
/// <summary>
/// Starts a new status display.
/// </summary>
@ -67,23 +80,23 @@ namespace Spectre.Console
_ = await StartAsync<object?>(status, async statusContext =>
{
await action(statusContext);
await action(statusContext).ConfigureAwait(false);
return default;
});
}).ConfigureAwait(false);
}
/// <summary>
/// Starts a new status display.
/// Starts a new status display and returns a result.
/// </summary>
/// <param name="status">The status to display.</param>
/// <param name="action">he action to execute.</param>
/// <typeparam name="T">The result type of task.</typeparam>
/// <param name="status">The status to display.</param>
/// <param name="func">he action to execute.</param>
/// <returns>A <see cref="Task{T}"/> representing the asynchronous operation.</returns>
public async Task<T> StartAsync<T>(string status, Func<StatusContext, Task<T>> action)
public async Task<T> StartAsync<T>(string status, Func<StatusContext, Task<T>> func)
{
if (action is null)
if (func is null)
{
throw new ArgumentNullException(nameof(action));
throw new ArgumentNullException(nameof(func));
}
// Set the progress columns
@ -108,7 +121,7 @@ namespace Spectre.Console
return await progress.StartAsync(async ctx =>
{
var statusContext = new StatusContext(ctx, ctx.AddTask(status), spinnerColumn);
return await action(statusContext).ConfigureAwait(false);
return await func(statusContext).ConfigureAwait(false);
}).ConfigureAwait(false);
}
}