C# 在调用多个其他事件时调用单个事件?

C# 在调用多个其他事件时调用单个事件?,c#,events,unity3d,C#,Events,Unity3d,我有一个对象列表,每个对象都有一个更新的事件:公共事件系统现在我想得到一个事件,当我的所有对象至少触发一次更新的事件时 实现这一点最干净的方法是什么 注意:我在Unity中工作,它不必是线程安全的。首先编写一个方法来创建一个任务,该任务将在下次事件触发时完成: public static Task WhenUpdated(this IUpdatable updatable) { var tcs = new TaskCompletionSource<bool>(); A

我有一个对象列表,每个对象都有一个
更新的
事件:
公共事件系统现在我想得到一个事件,当我的所有对象至少触发一次
更新的
事件时

实现这一点最干净的方法是什么


注意:我在Unity中工作,它不必是线程安全的。

首先编写一个方法来创建一个
任务,该任务将在下次事件触发时完成:

public static Task WhenUpdated(this IUpdatable updatable)
{
    var tcs = new TaskCompletionSource<bool>();
    Action handler = null;
    handler = () =>
    {
        tcs.TrySetResult(true);
        updatable.Updated -= handler;
    };
    updatable.Updated += handler;
    return tcs.Task;
}

当所有事件都已触发时,该任务将完成。如果愿意,您可以启动偶数作为延续,或者只公开该任务,以便使用者可以添加自己的延续来执行任何适当的操作。

您当前的方法有什么问题?你有错误吗?或者在所有对象更新之前触发事件?可能只是在每个事件结束时调用一个方法,该方法使用事件触发时设置的布尔标志<代码>如果(!AllFlags){/*现在什么都不做*/}其他{/*现在就做*/}
我当前的方法?我没有。每个对象都会触发其已更新的事件,但我需要知道何时所有对象都已更新。同意@DangerZone-似乎这些对象都应该有一个更新的属性,该属性由更新的事件处理程序设置。然后,每个对象的更新事件处理程序都应调用一个方法,该方法查看对象列表,如果它们都标记为“已更新”,则可以执行所需的操作。我的代码是:
var task = Task.WhenAll(list.Select(item => item.WhenUpdated()));