В моем основном классе у меня есть такое событие
private event System.Action OnActionFinished;
И зная, что await вызывает метод GetAwaiter (), у меня есть метод расширения System.Action: `
public static TaskAwaiter<object> GetAwaiter(this Action action)
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
action += () => tcs.SetResult(null);
return tcs.Task.GetAwaiter();
}
in чтобы иметь возможность писать await OnActionFinished;
в методе async
.
public async Task ExecuteTurns(Queue<TurnAction> turnActions)
{
foreach (TurnAction turn in turnActions)
{
Action<Vector2> TurnMethod = null;
switch (turn.TurnType)
{
case TurnType.Walk:
TurnMethod = Walk;
break;
case TurnType.Jump:
TurnMethod = Jump;
break;
case TurnType.Shoot:
TurnMethod = rangedWeapon.Shoot;
break;
}
Task.Run(async () => {
TurnMethod(turn.Direction);
});
await OnActionFinished;
}
}
OnActionFinished вызывается в конце методов Walk, Jump и Shoot.
Почему это не работает