Advertisement
Guest User

Untitled

a guest
Aug 17th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. internal interface IEventDispatchData<TSender, out TArgs>
  2. where TArgs : AsyncEventArgs
  3. {
  4. Task InvokeAsync();
  5. }
  6.  
  7. internal sealed class EventDispatchData<TSender, TArgs> : IEventDispatchData<TSender, TArgs>
  8. where TArgs : AsyncEventArgs
  9. {
  10. public AsyncEvent<TSender, TArgs> Event { get; }
  11. public TSender Sender { get; }
  12. public TArgs EventArgs { get; }
  13.  
  14. internal EventDispatchData(AsyncEvent<TSender, TArgs> asyncEvent, TSender sender, TArgs e)
  15. {
  16. this.Event = asyncEvent;
  17. this.Sender = sender;
  18. this.EventArgs = e;
  19. }
  20.  
  21. public async Task InvokeAsync()
  22. => await this.Event.InvokeAsync(this.Sender, this.EventArgs).ConfigureAwait(false);
  23. }
  24.  
  25. internal static class EventDispatchData
  26. {
  27. public static IEventDispatchData<TSender, TArgs> Create<TSender, TArgs>(AsyncEvent<TSender, TArgs> asyncEvent, TSender sender, TArgs e)
  28. where TArgs : AsyncEventArgs
  29. => new EventDispatchData<TSender, TArgs>(asyncEvent, sender, e);
  30.  
  31. public static IEventDispatchData<TSender, TArgs> CreateDispatch<TSender, TArgs>(this AsyncEvent<TSender, TArgs> asyncEvent, TSender sender, TArgs e)
  32. where TArgs : AsyncEventArgs
  33. => Create(asyncEvent, sender, e);
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement