我有一个类,其中每个方法都异步执行,即返回一个任务,但是每个方法都应该等待前面的调用完成。
继续,对吧?
除了任务延续在参数中采用委托(Action),而不是另一个任务。
我尝试了不同的东西,我能做的最好的事情是下面的(对我来说非常复杂)代码:
private Task QueueTask(Func<Task> futureTask)
{
var completionSource = new TaskCompletionSource<int>();
_lastTask.ContinueWith(async t =>
{
try
{
await futureTask();
completionSource.SetResult(0);
}
catch (Exception ex)
{
completionSource.SetException(ex);
}
});
_lastTask = completionSource.Task;
return _lastTask;
}
这里 _lastTask 是我班级的私人成员。由于所有调用都来自 UI 线程,我只保留最后一个任务并继续执行它。
正如我所说,我发现这段代码非常复杂。你有更好的建议吗?