58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
![]() |
using Microsoft.Extensions.Hosting;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Threading.Tasks.Dataflow;
|
|||
|
|
|||
|
namespace ActionBlockTest
|
|||
|
{
|
|||
|
public class Worker : BackgroundService
|
|||
|
{
|
|||
|
private readonly ILogger<Worker> _logger;
|
|||
|
|
|||
|
private ActionBlock<int> actionBlock;
|
|||
|
|
|||
|
public Worker(ILogger<Worker> logger)
|
|||
|
{
|
|||
|
_logger = logger;
|
|||
|
}
|
|||
|
public override Task StartAsync(CancellationToken cancellationToken)
|
|||
|
{
|
|||
|
|
|||
|
FileStream fileStream = new FileStream("./test.txt", FileMode.OpenOrCreate);
|
|||
|
fileStream.Seek(0, SeekOrigin.Current);
|
|||
|
|
|||
|
StreamWriter streamWriter = new StreamWriter(fileStream);
|
|||
|
|
|||
|
for (int i = 0; i < 2000; i++)
|
|||
|
{
|
|||
|
streamWriter.WriteLine("{\"seq\": \"" + i + "\",\"camName\": \"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>1_ǹ<5F><C7B9>\",\"presetCode\": \"1\"},");
|
|||
|
|
|||
|
}
|
|||
|
streamWriter.Flush();
|
|||
|
streamWriter.Close();
|
|||
|
|
|||
|
actionBlock = new ActionBlock<int>(
|
|||
|
async e => { Task.Delay(1000).Wait(); Console.WriteLine(e); },
|
|||
|
new ExecutionDataflowBlockOptions()
|
|||
|
{ MaxDegreeOfParallelism = 1, MaxMessagesPerTask = 10 }
|
|||
|
);
|
|||
|
return base.StartAsync(cancellationToken);
|
|||
|
}
|
|||
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|||
|
{
|
|||
|
int index = 0;
|
|||
|
while (!stoppingToken.IsCancellationRequested)
|
|||
|
{
|
|||
|
//_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
|||
|
actionBlock.Post(index++);
|
|||
|
MemoryStream memoryStream = new MemoryStream();
|
|||
|
StreamWriter streamWriter = new StreamWriter(memoryStream);
|
|||
|
await Task.Delay(10, stoppingToken);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|