multithreading - GraphQL .NET FieldResolver 在每个异步 http 请求上都失败
问题描述
我已经使用 NuGets GraphQL for .NET 4.6.0设置了一个ASP.CORE 5应用程序。在这种情况下,我添加了一个带有一个 ListGraphType 字段的查询,该字段将返回汽车物品列表。我也喜欢在这一点上使用数据加载器和 httpRequests 到我的外部 api。
所以我像这样设置我的查询:
public CarQuery(IDataLoaderContextAccessor accessor, ICarStore carStore)
{
Field<ListGraphType<CarItemType>, List<CarItem>>()
.Name("MyItems")
.Description("A type that returns a complex data")
.ResolveAsync( context =>
{
var loader = accessor.Context.GetOrAddLoader<List<CarItem>>("GetMyItems", carStore.ReadCarItemsAsync);
return loader.LoadAsync();
});
}
ReadCarItemAsync 返回一个包含这样的汽车的列表:
public async Task<List<CarItem>> ReadCarItemsAsync()
{
var carList = new List<CarItem>();
var client = _clientFactory.CreateClient("gcRedisHttpClient");
var request = new HttpRequestMessage(HttpMethod.Get,
"cars/?num=1&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new&format=plain");
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
using (var responseStream = await response.Content.ReadAsStreamAsync())
{
carList = await JsonSerializer.DeserializeAsync<List<CarItem>>(responseStream);
}
}
else
{
carList = new List<CarItem>();
}
return carList;
}
ResolveAsync() 获取一个列表或一个空列表。但最终解析器以这样的异常结束:
System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at GraphQL.Execution.ParallelExecutionStrategy.ExecuteNodeTreeAsync(ExecutionContext context, ExecutionNode rootNode) in /_/src/GraphQL/Execution/ParallelExecutionStrategy.cs:line 48
at GraphQL.Execution.ExecutionStrategy.ExecuteAsync(ExecutionContext context) in /_/src/GraphQL/Execution/ExecutionStrategy.cs:line 28 at GraphQL.DocumentExecuter.ExecuteAsync(ExecutionOptions options) in /_/src/GraphQL/Execution/DocumentExecuter.cs:line 212
at GraphQL.Server.DefaultGraphQLExecuter`1.ExecuteAsync(String operationName, String query, Inputs variables, IDictionary`2 context, IServiceProvider requestServices, CancellationToken cancellationToken) in /_/src/Core/DefaultGraphQLExecuter.cs:line 44
at GraphQL.Server.Transports.AspNetCore.GraphQLHttpMiddleware`1.InvokeAsync(HttpContext context) in /_/src/Transports.AspNetCore/GraphQLHttpMiddleware.cs:line 138
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
我不明白为什么我的解析器以异常结束。httpWeb 请求运行良好。还有反序列化任务。我认为例外是关于线程问题,但我不知道为什么以及如何。
有谁知道我该如何解决这个问题?
解决方案
推荐阅读
- office-ui-fabric - 如何在流利的 ui react Dropdown 控件中从 API 响应中设置动态选项?
- python - 如何将pickle文件的文件夹转换为单个csv文件
- ios - 无法在 iOS 中连接 firebase crashlytics
- latex - 如何在 LaTeX 中编写标题页?
- javascript - 延迟加载缩略图时阻止 YouTube Cookie
- java - 在 pkcs7 中验证 ECDSA 签名时出错
- amazon-web-services - AWS Key Management Service 散列和加密
- postman - 在预请求脚本中获取环境变量时未解析邮递员嵌套变量
- uipath - UiPath 自动化协助
- java - java.lang.NoSuchMethodError: org.apache.wicket.request.cycle.RequestCycle.find(Ljava/lang/Class;)Lorg/apache/wicket/request/IRequestHandler;