Use Task.Run instead of Task.Factory.StartNew (#611)

Addresses #571
Using `TaskCreationOptions.LongRunning` creates a dedicated thread, but
it's released on the first await. Using Task.Run uses the thread pool
instead
This commit is contained in:
Andrew Lock 2019-01-02 17:12:26 +00:00 committed by Pavel Krymets
parent 22097c6c35
commit e21dc21b40
1 changed files with 2 additions and 5 deletions

View File

@ -75,7 +75,7 @@ namespace Microsoft.Extensions.Logging.AzureAppServices
internal abstract Task WriteMessagesAsync(IEnumerable<LogMessage> messages, CancellationToken token); internal abstract Task WriteMessagesAsync(IEnumerable<LogMessage> messages, CancellationToken token);
private async Task ProcessLogQueue(object state) private async Task ProcessLogQueue()
{ {
while (!_cancellationTokenSource.IsCancellationRequested) while (!_cancellationTokenSource.IsCancellationRequested)
{ {
@ -143,10 +143,7 @@ namespace Microsoft.Extensions.Logging.AzureAppServices
new BlockingCollection<LogMessage>(new ConcurrentQueue<LogMessage>(), _queueSize.Value); new BlockingCollection<LogMessage>(new ConcurrentQueue<LogMessage>(), _queueSize.Value);
_cancellationTokenSource = new CancellationTokenSource(); _cancellationTokenSource = new CancellationTokenSource();
_outputTask = Task.Factory.StartNew<Task>( _outputTask = Task.Run(ProcessLogQueue);
ProcessLogQueue,
null,
TaskCreationOptions.LongRunning);
} }
private void Stop() private void Stop()