Skip to content

Commit

Permalink
Merge pull request #143 from martincostello/Cancellation-Tokens
Browse files Browse the repository at this point in the history
Pass-through CancellationTokens to connections
  • Loading branch information
StanleyGoldman committed Aug 10, 2018
2 parents a438be6 + fb01de8 commit a7a63b3
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 28 deletions.
6 changes: 2 additions & 4 deletions Octokit.GraphQL.Core.Generation/SchemaReader.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Octokit.GraphQL.Core.Generation.Models;
using Octokit.GraphQL.Core.Introspection;

Expand Down Expand Up @@ -131,7 +129,7 @@ public static async Task<SchemaModel> ReadSchema(IConnection connection)
}).ToList()
});

return await connection.Run(query);
return await connection.Run(query).ConfigureAwait(false);
}
}
}
19 changes: 11 additions & 8 deletions Octokit.GraphQL.Core/ConnectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Octokit.GraphQL.Core;

Expand All @@ -9,25 +9,28 @@ public static class ConnectionExtensions
{
public static Task<T> Run<T>(
this IConnection connection,
IQueryableValue<T> expression)
IQueryableValue<T> expression,
CancellationToken cancellationToken = default)
{
return connection.Run(expression.Compile());
return connection.Run(expression.Compile(), cancellationToken: cancellationToken);
}

public static Task<IEnumerable<T>> Run<T>(
this IConnection connection,
IQueryableList<T> expression)
IQueryableList<T> expression,
CancellationToken cancellationToken = default)
{
return connection.Run(expression.Compile());
return connection.Run(expression.Compile(), cancellationToken: cancellationToken);
}

public static async Task<T> Run<T>(
this IConnection connection,
ICompiledQuery<T> query,
Dictionary<string, object> variables = null)
Dictionary<string, object> variables = null,
CancellationToken cancellationToken = default)
{
var run = query.Start(connection, variables);
while (await run.RunPage()) { }
while (await run.RunPage(cancellationToken).ConfigureAwait(false)) { }
return run.Result;
}
}
Expand Down
8 changes: 6 additions & 2 deletions Octokit.GraphQL.Core/Core/IQueryRunner.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Octokit.GraphQL.Core
Expand All @@ -16,8 +17,11 @@ public interface IQueryRunner
/// <summary>
/// Runs the next page of the query.
/// </summary>
/// <returns></returns>
Task<bool> RunPage();
/// <param name="cancellationToken">The optional cancellation token to use.</param>
/// <returns>
/// A <see cref="Task{TResult}"/> that returns whether a page was returned.
/// </returns>
Task<bool> RunPage(CancellationToken cancellationToken = default);
}

/// <summary>
Expand Down
13 changes: 9 additions & 4 deletions Octokit.GraphQL.Core/Core/PagedQuery.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Octokit.GraphQL.Core.Deserializers;

Expand Down Expand Up @@ -82,11 +82,16 @@ protected class Runner : IQueryRunner<TResult>, ISubqueryRunner
this.Variables = variables;
}

/// <inheritdoc />
public TResult Result { get; private set; }

/// <inheritdoc />
object IQueryRunner.Result => Result;

protected IDictionary<string, object> Variables { get; }

public virtual async Task<bool> RunPage()
/// <inheritdoc />
public virtual async Task<bool> RunPage(CancellationToken cancellationToken = default)
{
if (subqueryRunners == null)
{
Expand All @@ -95,7 +100,7 @@ public virtual async Task<bool> RunPage()

// This is the first run, so run the master page.
var master = owner.MasterQuery;
var data = await connection.Run(master.GetPayload(Variables));
var data = await connection.Run(master.GetPayload(Variables), cancellationToken).ConfigureAwait(false);
var json = deserializer.Deserialize(data);

json.AddAnnotation(this);
Expand Down Expand Up @@ -130,7 +135,7 @@ public virtual async Task<bool> RunPage()
var runner = subqueryRunners.Peek();

// Run its next page and pop it from the active runners if finished.
if (!await runner.RunPage())
if (!await runner.RunPage(cancellationToken).ConfigureAwait(false))
{
subqueryRunners.Pop();
}
Expand Down
7 changes: 4 additions & 3 deletions Octokit.GraphQL.Core/Core/PagedSubquery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Octokit.GraphQL.Core.Builders;
using Octokit.GraphQL.Core.Deserializers;

namespace Octokit.GraphQL.Core
{
Expand Down Expand Up @@ -122,9 +122,10 @@ class SubqueryRunner : Runner
this.addResult = addResult;
}

public override async Task<bool> RunPage()
/// <inheritdoc/>
public override async Task<bool> RunPage(CancellationToken cancellationToken = default)
{
var more = await base.RunPage();
var more = await base.RunPage(cancellationToken).ConfigureAwait(false);

if (!more)
{
Expand Down
15 changes: 10 additions & 5 deletions Octokit.GraphQL.Core/Core/SimpleQuery.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Octokit.GraphQL.Core.Serializers;
using Octokit.GraphQL.Core.Syntax;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using System.Threading.Tasks;
using Octokit.GraphQL.Core.Builders;
using Octokit.GraphQL.Core.Deserializers;
using Octokit.GraphQL.Core.Serializers;
using Octokit.GraphQL.Core.Syntax;

namespace Octokit.GraphQL.Core
{
Expand Down Expand Up @@ -111,13 +112,17 @@ class Runner : IQueryRunner<TResult>
this.variables = variables;
}

/// <inheritdoc />
public TResult Result { get; private set; }

/// <inheritdoc />
object IQueryRunner.Result => Result;

public async Task<bool> RunPage()
/// <inheritdoc />
public async Task<bool> RunPage(CancellationToken cancellationToken = default)
{
var deserializer = new ResponseDeserializer();
var data = await connection.Run(parent.GetPayload(variables));
var data = await connection.Run(parent.GetPayload(variables), cancellationToken).ConfigureAwait(false);
Result = deserializer.Deserialize(parent.ResultBuilder, data);
return false;
}
Expand Down
8 changes: 6 additions & 2 deletions Octokit.GraphQL.Core/Core/SimpleSubquery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Octokit.GraphQL.Core.Builders;
Expand Down Expand Up @@ -126,14 +127,17 @@ class Runner : IQueryRunner<TResult>
this.addResult = addResult;
}

/// <inheritdoc />
public TResult Result { get; private set; }

/// <inheritdoc />
object IQueryRunner.Result => Result;

public async Task<bool> RunPage()
/// <inheritdoc />
public async Task<bool> RunPage(CancellationToken cancellationToken = default)
{
var payload = owner.GetPayload(variables);
var data = await connection.Run(payload);
var data = await connection.Run(payload, cancellationToken).ConfigureAwait(false);
var json = deserializer.Deserialize(data);
var pageInfo = owner.PageInfo(json);

Expand Down

0 comments on commit a7a63b3

Please sign in to comment.