Created
March 22, 2019 20:47
-
-
Save rofr/564828a21492b1c9da4c4a651ead8f55 to your computer and use it in GitHub Desktop.
Event Aggregator DP example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface IMessageSource | |
{ | |
event MessageHandler MessagePublished; | |
} | |
public delegate void MessageHandler(string message); | |
class MessageAggregator | |
{ | |
public event MessageHandler MessagePublished; | |
public void Add(IMessageSource messageSource) | |
{ | |
messageSource.MessagePublished += Publish; | |
} | |
public void Remove(IMessageSource messageSource) | |
{ | |
messageSource.MessagePublished -= Publish; | |
} | |
private void Publish(string message) | |
{ | |
try | |
{ | |
MessagePublished?.Invoke(message); | |
} | |
catch (Exception) { } | |
} | |
} | |
class Source : IMessageSource | |
{ | |
private string _message; | |
public event MessageHandler MessagePublished; | |
public Source(string message) | |
{ | |
_message = message; | |
} | |
public async Task Ponder() | |
{ | |
var rnd = new Random(); | |
await Task.Run(async () => | |
{ | |
for (int i = 0; i < 10; i++) | |
{ | |
await Task.Delay(TimeSpan.FromMilliseconds(rnd.Next(2000))); | |
MessagePublished?.Invoke(i + ":" + _message); | |
} | |
}); | |
} | |
} | |
class MessageConsumer | |
{ | |
static void Main(string[] args) | |
{ | |
var aggregator = new MessageAggregator(); | |
aggregator.MessagePublished += Handle; | |
var arnold = new Source("Hasta la vista baby"); | |
aggregator.Add(arnold); | |
var robin = new Source("Holy cobwebs, Batman"); | |
aggregator.Add(robin); | |
var djt = new Source("I want a wall and I want it now"); | |
aggregator.Add(djt); | |
Task.WhenAll(arnold.Ponder(), robin.Ponder(), djt.Ponder()) | |
.GetAwaiter() | |
.GetResult(); | |
} | |
private static void Handle(string message) | |
{ | |
Console.WriteLine("Message received: " + message); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment