我创建了一个C#Restsharp客户机,使用同步调用对我的API进行查询。 同步调用正常工作,但异步调用从不返回任何内容。 await运算符应该挂起封闭异步方法的求值,直到其操作数表示的异步操作完成为止。 当异步操作完成时,await运算符返回操作的结果。 然而,在我的情况下,这种情况从来没有发生过。 我现在已经搜索了整个堆栈溢出,但是我不能弄清楚为什么异步调用不会返回任何东西。 有谁能发现是什么原因导致了这些问题?我如何解决这些问题? 这是我的设置:
客户端方法:
public class Objects{
private readonly IRestClient _restClient;
public Objects(IRestClient restClient)
{
_restClient = restClient;
}
public async Task< List<ObjectGet> CreateObjects(List<ObjectBase>> objects, Boolean createCdfFile = true)
{
var request = new RestRequest("/objects/", Method.POST) { RequestFormat = DataFormat.Json };
var objectsJson = JsonConvert.SerializeObject(objects, Formatting.Indented);
request.AddParameter("create_cdf_file", createCdfFile, ParameterType.QueryString)
.AddParameter("application/json", objectsJson, ParameterType.RequestBody);
IRestResponse<List<ObjectGet>> response = await _restClient.ExecuteAsync<List<ObjectGet>>(request);
return response.Data;
}
}
我的同步呼叫工作:
var obj = _restClient.FetchAllObjects(filter).GetAwaiter().GetResult();
返回:System.Collections.Generic.List1[RestSharPapiclient.Model.ObjectWithRelations]
我的异步调用正在执行,但是。。
var obj = _restClient.FetchAllObjects(filter);
从不返回任何内容:
但是,如果在同步调用之前按顺序运行异步调用,则它们都返回正确的结果:
var obj = _restClient.FetchAllObjects(filter);
var objAsync = _restClient.FetchAllObjects(filter).GetAwaiter().GetResult();
返回:
System.Collections.Generic.List1[RestSharPapiclient.Model.ObjectWithRelationsh],System.Collections.Generic.List1[RestSharPapiclient.Model.ObjectWithRelationsh]
这是我的项目文件
TargetFramework=netstandard2.0
<LangVersion>8.0</LangVersion>
"Newtonsoft.Json" Version="12.0.3"
"RestSharp" Version="106.11.4"
如有任何帮助,将不胜感激
它尝试执行并退出[原文如此],该行代码为0。
当然,一旦到达一个延续点,程序流就会返回到您的调用函数,其余的代码会做一些事情(在您的情况下,很可能是使用线程池线程来构建响应)。
当您到达main
的末尾时会发生什么? 程序将退出。
当然,现在您没有显示如何调用它,但从您显示的代码模式来看,我确信您使用的是同步异步反模式。 不要。 永远不会。 声明您的main
async
和正确的await
调用,您将得到您想要的。
编辑:在测试用例5中,任务似乎处于状态。 我在.NET 4.5中使用System.net.http.HttpClient时遇到了一些奇怪的行为--其中“等待”调用的结果(例如)将永远不会返回。 只有在使用新的Async/Await语言功能和任务API的特定情况下才会出现这种情况--代码似乎总是在只使用延续时工作。
问题内容: 尝试执行以下操作: 我收到此错误: 无法确定条件表达式的类型,因为“ System.DBNull”和“ System.DateTime”之间没有隐式转换 我显然理解该错误,但是考虑到Parameters.Value是object类型,为什么类型甚至很重要?有没有办法完成我想做的事情? 问题答案: 返回值进入的值并没有什么区别,因为 必须首先确定返回值的类型 。 这两个值(投一个,)其他
Java1.8正在接收类,它允许我们显式地说明一个方法何时可能返回空值,并在使用它之前“强制”它的使用者验证它是否为空()。 我看到C#有,它执行类似的操作,但使用的是基本类型。它似乎用于DB查询,以区分值是否存在且为0,以及值是否不存在且为NULL。 但似乎C#的对对象不起作用,只对基本类型起作用,而Java的只对对象起作用,对基本类型不起作用。 在C#中是否有一个可为空的/可选的类,迫使我们在
代码1返回1。 代码 2 返回 49。 他们不应该返回相同的结果吗? 请注意,49是1的ASCII码。 编辑:就像@matt在评论里说的那样。使用三元运算符时,“:”的两边被视为同一类型。由于getNumericValue假设它是一个int,两边都是int。条件为真,所以取左边,是chr,但认为是int。
当前的GraphX仅仅支持一组简单的常用结构性操作。下面是基本的结构性操作列表。 class Graph[VD, ED] { def reverse: Graph[VD, ED] def subgraph(epred: EdgeTriplet[VD,ED] => Boolean, vpred: (VertexId, VD) => Boolean): Graph
当我运行这段代码时,我得到以下错误截图 50:7:错误:与“操作员”不匹配
本文向大家介绍Python中的数学运算操作符使用进阶,包括了Python中的数学运算操作符使用进阶的使用技巧和注意事项,需要的朋友参考一下 Python中对象的行为是由它的类型 (Type) 决定的。所谓类型就是支持某些特定的操作。数字对象在任何编程语言中都是基础元素,支持加、减、乘、除等数学操作。 Python的数字对象有整数和浮点数,支持各种数学操作,比如+, -,*, /等。 没有这些操作符
假设我有下表: 我需要一个查询,将插入不存在的标签,并返回所有请求的标签ID。考虑以下事项: 此查询的输出是: 我需要的是在输出中有。