Вызов события SomeChangedAsync
не реализован правильно. В случае нескольких обработчиков событий ожидается только последний подключенный обработчик. Чтобы дождаться всех обработчиков, вы должны получить их с помощью метода GetInvocationList
, а затем решить, как вы хотите их вызывать и ожидать. Вот последовательный подход:
public async Task SomeMethodAsync()
{
SomeChanged?.Invoke();
Delegate[] delegates = SomeChangedAsync?.GetInvocationList();
if (delegates != null)
{
var taskFactories = delegates.Cast<Func<Task>>().ToArray();
foreach (var taskFactory in taskFactories)
{
var task = taskFactory();
await task;
}
}
}
Вы также можете вызывать и ожидать их всех одновременно (используя Task.WhenAll
), как предлагается здесь .