首页 > 解决方案 > 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服务的正确方法是什么?

标签: c#async-awaitrestsharp

解决方案


推荐阅读