public async Task Start(ICommunicator communicator) { this.communicator = communicator; await OnStart(); Task.Factory.StartNew(async () => { while (true) { var message = await communicator.GetNextMessage(); await OnMessageReceived(message.Sender, message.Content); } }); }