gpt4 book ai didi

asp.net-core - 如何在 ASP NET Core 中集成 TPL 数据流

转载 作者:行者123 更新时间:2023-12-04 15:25:53 26 4
gpt4 key购买 nike

您好,最近对 TPL Dataflow 非常感兴趣,我想将它集成到我的 ASP .NET Core 应用程序中。我想将它用作管道,来自应用程序不同部分的多个方法可以将数据发布到此 DataFlow 链。我不知道的是,如果您希望从多个地方调用它们,您将 block 链接存储在哪里?

制作人

public class Producer
{
private BufferBlock<int> startBlock{get;}
private ActionBlock<int> ioBlock{get;}
private IOService service;

private void InitializeChain()
{
this.startBlock=new BufferBlock<int>();
var transformLink=new TransformBlock<int,string>([something]);
// some chain of blocks here
this.ioBlock=new ActionBlock<int>(async(x)=>await this.service.WriteAsync(x));
this.startBlock.LinkTo([someBlock]).LinkTo([someOtherBlock])......LinkTo(ioBlock);
}
public async Task AddAsync(int data)
{
this.BufferBlock.Post(data);
}
public Producer(IOService service)
{
this.service=service;
this.InitializeChain();
}
}

API 生产商
我设想这个 Producer 从我的应用程序的多个部分被调用,为简洁起见,我们使用 Controller-s:

public class C1:Controller
{
private Producer producer;
[HttpPost]
[Route([someroute])
public async Task SomeRoute(int data)
{
await this.producer.AddAsync(data);
}
[HttpGet]
[Route([someotherroute])
public async Task SomeOtherRoute(int data)
{
await this.producer.AddAsync(data);
}
public C1(Producer producer)
{
this.producer=producer;
}
}

启动

  public void ConfigureServices(IServiceCollection services) {
services.AddSingleton<Producer>();
}

这可以扩展到多个 Controller 场景或层次结构中的更深层次。

现在我的问题是:
保留Dataflow链的Producer应该如何注入(inject)?它应该是短暂的吗? Blocks 是否应该在每次调用时实例化?

不知道这样设计好不好,我知道TPL Dataflow是线程安全的,但是可以这么用吗?

P.S 我基本上不知道以什么形式保留我的 Dataflow 管道及其生命周期,如果我希望它在我的整个范围内可用 ASP NET Core 应用程序。我想从多个端点(直接或在调用层次结构中更深层)获取数据,对它们进行批处理,转换它们,并控制它们最终写入外部源的方式(async 操作)。这与 ASP NET Core 的现有 ThreadPool 配合得很好吗?

P.S 2:这个问题也困扰着我寻找一个 Rx 等价物。

最佳答案

我建议不要将 Controller 直接链接到后台处理器。出于可靠性原因,它们之间应该有一个持久队列。这可以是 Azure 队列、Amazon 简单队列,甚至是像 MSMQ 或数据库这样的老派东西。

您的处理器可以是独立的(Azure Function、Amazon Lambda 或像 Win32 服务这样的老派),也可以是您的 Web 应用程序的一部分(ASP.NET Core 托管服务)。

您的 Controller 写入持久队列,然后返回。然后您的处理器从队列中读取消息并处理它们。您的处理器将使用 TPL Dataflow 或 Rx - 以更自然的为准。

关于asp.net-core - 如何在 ASP NET Core 中集成 TPL 数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com