首页 > 解决方案 > 如何退出 C# GraphQL 订阅?

问题描述

我正在使用以下代码订阅 GraphQL 源:

public override async Task RunAsync(RunMode mode, CancellationToken cancel)
{
    var consumer = new XYZConsumer(new GraphQLHttpClient(_options.Url, new NewtonsoftJsonSerializer()));
    var result = await consumer.GetAllXYZ();

    result.Subscribe(t =>
    {
        ****How_do_I_get_out_of_here?*****
...


public class XYZConsumer
{
    private IObservable<GraphQL.GraphQLResponse<SubscriptionApi>> subscriptionStream;
    private readonly IGraphQLClient _client;
    public XYZConsumer(IGraphQLClient client)
    {
        _client = client;
    }

    public async Task<IObservable<GraphQL.GraphQLResponse<SubscriptionApi>>> GetAllXYZ()
    {
        var posSubscription = new GraphQL.GraphQLRequest

        {
            Query = @"subscription mquery..."
        };
        subscriptionStream = _client.CreateSubscriptionStream<SubscriptionApi>(posSubscription);
        return subscriptionStream;
    }
}

我有几个可能相关的问题:

  1. GetAllXYZ由编译器突出显示,消息This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator ...解决方案我发现建议我应该重新执行任务而不是subscriptionStream但我需要返回它,那么我该如何更改呢?
  2. 我陷入了订阅循环。How_do_I_get_out_of_here?读取 100 条记录时如何退出?

标签: c#graphql

解决方案


添加using System.Reactive.Linq;并将Take其限制为例如 20 条记录:

result
   .Take(20)
   .Subscribe(t =>

推荐阅读