我希望我能在第一次尝试时正确地解释这一点:
我有一个
Dictionary<int, Action> MyActions
. 我有一个方法如下所示:
int actionNumber = 0;
while (isRunning) {
if (Phases.TryGetValue(actionNumber, out var action))
{
action.Invoke();
}
actionNumber++;
}
其思想是,每当前面的方法完成时,这些方法都会互相运行。当出现错误时,我会保存actionNumber,以便返回到正确的最后一个方法并从那里继续。
我在字典中输入的方法最初只是简单的void方法。现在我发现我自己也必须在那里放置异步方法,因为其中一些方法已经在它们的体内等待。这意味着字典必须在其中保留void方法和异步任务方法。while循环必须有一个wait,否则它将在运行异步任务方法时继续。
我的解决方案:
解决方案A:
使词典成为
Dictionary<int, Task> MyActions
让每件事都成为一项任务,即使这是一个简单的无效方法。将while循环更改为:
int actionNumber = 0;
while (isRunning) {
if (Phases.TryGetValue(actionNumber, out var task))
{
Task.Run(() => task).Wait();
}
actionNumber++;
}
解决方案B:
保持一切原样。将异步任务方法包装到另一个等待任务方法的void方法中。将此void方法放入动作字典中。
解决方案C:
将每个异步任务方法转换为void方法,然后等待重写。后果
还有其他更好的解决方案吗?我倾向于使用解决方案A,因为其他开发人员更容易查看字典并清楚地看到所有这些都是任务。