У меня есть приложение 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 не приводит к достижению точки останова. Только когда я выполняю ожидание, операция фактически начинает выполняться.
Я довольно новичок в асинхронности в C #, но похоже, что RestSharp возвращает мне «холодную задачу». Я не могу вызвать Start
для задачи самостоятельно, или я получаю «Старт не может быть вызван для задачи в стиле обещания». Согласно этой ТАК ... ... 1015 *
Вы получаете эту ошибку, потому что класс Task уже запустил
задание, прежде чем дать его вам.
Так что я в тупике. Отсутствие попадания в точку останова (и другие тесты) говорит о том, что у меня холодная задача, а сообщение об ошибке говорит о том, что у меня горячая задача. Итак, как правильно использовать асинхронную службу покоя?