2024-07-15 10:31:26 +08:00

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\": \"¿ØÖÆÊÒ_Ïñ»ú1_ǹ»ú\",\"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);
}
}
}
}