mirror of
https://github.com/lidarr/Lidarr
synced 2025-02-22 05:50:56 +00:00
event aggregator uses threadpool to publish events
This commit is contained in:
parent
48c06de098
commit
3d71c129eb
2 changed files with 21 additions and 5 deletions
|
@ -88,7 +88,7 @@ public void broken_handler_should_not_effect_others_handler()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Test]
|
/* [Test]
|
||||||
public void should_queue_multiple_async_events()
|
public void should_queue_multiple_async_events()
|
||||||
{
|
{
|
||||||
var eventA = new EventA();
|
var eventA = new EventA();
|
||||||
|
@ -130,7 +130,7 @@ public void should_queue_multiple_async_events()
|
||||||
counter.WaitForAllItems();
|
counter.WaitForAllItems();
|
||||||
|
|
||||||
counter.MaxThreads.Should().Be(3);
|
counter.MaxThreads.Should().Be(3);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,9 @@ public class EventAggregator : IEventAggregator
|
||||||
|
|
||||||
public EventAggregator(Logger logger, IServiceFactory serviceFactory)
|
public EventAggregator(Logger logger, IServiceFactory serviceFactory)
|
||||||
{
|
{
|
||||||
var scheduler = new LimitedConcurrencyLevelTaskScheduler(3);
|
|
||||||
|
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_serviceFactory = serviceFactory;
|
_serviceFactory = serviceFactory;
|
||||||
_taskFactory = new TaskFactory(scheduler);
|
_taskFactory = new TaskFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PublishEvent<TEvent>(TEvent @event) where TEvent : class ,IEvent
|
public void PublishEvent<TEvent>(TEvent @event) where TEvent : class ,IEvent
|
||||||
|
@ -29,8 +27,26 @@ public void PublishEvent<TEvent>(TEvent @event) where TEvent : class ,IEvent
|
||||||
|
|
||||||
var eventName = GetEventName(@event.GetType());
|
var eventName = GetEventName(@event.GetType());
|
||||||
|
|
||||||
|
/*
|
||||||
|
int workerThreads;
|
||||||
|
int completionPortThreads;
|
||||||
|
ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
|
||||||
|
|
||||||
|
int maxCompletionPortThreads;
|
||||||
|
int maxWorkerThreads;
|
||||||
|
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads);
|
||||||
|
|
||||||
|
|
||||||
|
int minCompletionPortThreads;
|
||||||
|
int minWorkerThreads;
|
||||||
|
ThreadPool.GetMinThreads(out minWorkerThreads, out minCompletionPortThreads);
|
||||||
|
|
||||||
|
_logger.Warn("Thread pool state WT:{0} PT:{1} MAXWT:{2} MAXPT:{3} MINWT:{4} MINPT:{5}", workerThreads, completionPortThreads, maxWorkerThreads, maxCompletionPortThreads, minWorkerThreads, minCompletionPortThreads);
|
||||||
|
*/
|
||||||
|
|
||||||
_logger.Trace("Publishing {0}", eventName);
|
_logger.Trace("Publishing {0}", eventName);
|
||||||
|
|
||||||
|
|
||||||
//call synchronous handlers first.
|
//call synchronous handlers first.
|
||||||
foreach (var handler in _serviceFactory.BuildAll<IHandle<TEvent>>())
|
foreach (var handler in _serviceFactory.BuildAll<IHandle<TEvent>>())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue