0
我有一個對象列表,每個對象都有一個Updated
事件:public event System.Action Updated;
現在我想獲得一個事件,當我的所有對象至少一次觸發了他們的Updated
事件。當多個其他人都被呼叫時的單個事件呼叫?
什麼是最簡潔的方式來實現呢?
注意:我在Unity工作,它不必是線程安全的。
我有一個對象列表,每個對象都有一個Updated
事件:public event System.Action Updated;
現在我想獲得一個事件,當我的所有對象至少一次觸發了他們的Updated
事件。當多個其他人都被呼叫時的單個事件呼叫?
什麼是最簡潔的方式來實現呢?
注意:我在Unity工作,它不必是線程安全的。
開始通過編寫一個方法來創建一個Task
將在下一次的事件觸發完成:
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;
}
一旦你有,你可以使用WhenAll
,在Task
通過爲每個對象的你有:
當所有的事件發生時,這個任務就會完成。如果您願意,甚至可以作爲延續發佈,或者只是公開該任務,以便消費者可以添加自己的延續來執行任何適當的操作。
你目前的方法有什麼問題?你有一些錯誤嗎?或者在所有對象更新之前觸發事件? –
也許只是在每個事件結束時調用一個方法,這些事件使用由事件設置的布爾標誌作爲它們觸發的事件? 'if(!AllFlags){/ *什麼都不做* /} else {/ *現在做東西* /}' –
我目前的做法?我沒有。每個對象都會更新它的更新事件,但是我需要知道什麼時候所有對象都已更新。 –