using System;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Events
{
    /// 
    /// An interface that handles eventing.
    /// 
    public interface IEventManager
    {
        /// 
        /// Publishes an event.
        /// 
        /// the event arguments.
        /// The type of event.
        void Publish(T eventArgs)
            where T : EventArgs;
        /// 
        /// Publishes an event asynchronously.
        /// 
        /// The event arguments.
        /// The type of event.
        /// A task representing the publishing of the event.
        Task PublishAsync(T eventArgs)
            where T : EventArgs;
    }
}