我有一个WinForms应用程序,在该应用程序中我有一个存储库类Collections,该类使用RestSharp调用宁静的服务。存储库代码与此类似...
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#异步还很陌生,但是RestSharp似乎给了我一个“冷任务”。我自己无法在任务上调用Start
,或者得到“可能未在诺言式任务上调用开始”。根据{{3}} SO线程...
您收到该错误消息,因为Task类已经启动了 任务,然后再交给你。
所以我很困惑。没有断点命中(和其他测试)表明我的任务很冷,错误消息表明我的任务很热。那么,以异步方式使用静态服务的正确方法是什么?