public Task <TResult> PublishEvent(IEventTranslator <TEvent> translator) { var taskCompletionSource = new TaskCompletionSource <TResult>(); Events.Add(translator.Translate(Activator.CreateInstance <TEvent>(), 0)); taskCompletionSource.SetResult(default(TResult)); if (_publishAction != null) { _publishAction(); _publishAction = null; } return(taskCompletionSource.Task); }