c# - RestSharp - 如何返回热门任务?
问题描述
我有一个 WinForms 应用程序,在该应用程序中我有一个存储库类 Collections,它使用 RestSharp 调用一个 RESTful 服务。存储库代码类似于此...
public Task<IRestResponse<List<CollectionDto>>> GetCollectionsPagedAsync()
{
var client = RestClientFactory.Create();
var request = new RestRequest("api/collections");
// Parameters omitted for brevity
return client.ExecuteTaskAsync<List<CollectionDto>>(request);
}
我认为会发生的是,这将启动服务操作并立即返回任务。然后,当服务操作工作时,前端可以自由地执行其他操作。完成之后就是await
任务了。所以前端将类似于...
var repository = new CollectionRepository();
var getCollectionsTask = repository.GetCollectionsPagedAsync();
// Do other initialization work here
// If the collections task hasn't completed, wait it out...
var collectionList = await getCollectionsTask;
我在我的服务操作中设置了一个断点并测试了这段代码。对 ExecuteTaskAsync 的调用不会导致断点被命中。只有当我执行 await 时,操作才会真正开始运行。
我对 C# 中的 async 相当陌生,但似乎 RestSharp 给了我一个“冷任务”。我不能自己调用Start
任务,或者我得到“可能不会在承诺式任务上调用开始”。根据这个SO线程......
您收到该错误是因为 Task 类在将任务交给您之前已经启动了该任务。
所以我很难过。没有断点命中(和其他测试)表明我有一个冷任务,错误消息表明我有一个热任务。那么以异步方式使用restful服务的正确方法是什么?
解决方案
推荐阅读
- swift - 删除 Swift 5 中的转义“\”字符
- javascript - 我需要使用 JavaScript 或 HTML 链接到当前 HTML 页面中的另一个 HTML 页面
- apache - 基于健康检查 URL 的热备故障转移 Apache 模块
- python - python:MTCNN 没有保存所有文件
- java - getDeclaredMethods() + 创建数组 = 额外方法?
- .net-core - 在 asp.net core/grpc 集成测试中使用 HttpTest
- arrays - 在VBA中的动态范围数组上使用排序函数?
- elasticsearch - 设置 scaling_factor 参数时的奇怪行为
- javascript - 如何根据机器人中 QnAMaker 的提示显示多个按钮
- html - 我的第一个基于 HostGator 的网站没有连接 html 和 css