如何Action<T>使用Task异步执行作为方法参数接收的?参数传递或异步调用本身会出现困难。例如,以下代码从不调用FinishLongOperation().
private async void DoAction(Action<IProgress<string>> action)
{
PrepareLongOperation();
var progress = new Progress<string>();
progress.ProgressChanged += (nothing, message) =>
{
UpdateStatus(message);
};
Task task = new Task(new Action(() => action.Invoke(progress)));
await task;
FinishLongOperation();
}
当然,在这种情况下,传输Action<T>的代码具有完全有限的代码。
您的错误是您通过构造函数创建了一个任务,但从未运行它(不要
task.Start())。但是启动后台任务的最简单方法是调用
Task.Run: