Estou lutando para encontrar um exemplo moderno de algum código C # assíncrono que usa RestSharp com asynce await. Eu sei que houve uma atualização recente de Haack, mas não sei como usar os novos métodos.
Além disso, como posso fornecer um token de cancelamento para que a operação possa ser cancelada (por exemplo, se uma pessoa está cansada de esperar e pressiona o botão Cancelar na IU do aplicativo).
Bem, a atualização à qual Haack está se referindo foi feita por mim :) Deixe-me mostrar como usá-la, pois na verdade é muito simples. Anteriormente, você tinha métodos como ExecuteAsyncGetesse retornariam um tipo personalizado RestSharp chamado RestRequestAsyncHandle. Este tipo não pode ser esperado como tipos de async/awaittrabalho Taske Task<T>retorno. Minha solicitação pull adicionou sobrecargas aos métodos assíncronos existentes que retornam Task<T>instâncias. Essas Task<T>sobrecargas têm uma string "Tarefa" adicionada a seus nomes, por exemplo, a Task<T>sobrecarga para ExecuteAsyncGeté chamada ExecuteGetTaskAsync<T>. Para cada uma das novas Task<T>sobrecargas, há um método que não exige que um CancellationTokenseja especificado e outro que exige .
Agora vamos a um exemplo real de como usá-lo, que também mostrará como usar CancellationToken:
privatestaticasyncvoidMain(){var client =newRestClient();var request =newRestRequest("http://www.google.com");var cancellationTokenSource =newCancellationTokenSource();var restResponse =await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);// Will output the HTML contents of the requested pageConsole.WriteLine(restResponse.Content);}
Isso usará a ExecuteTaskAsyncsobrecarga que retorna uma Task<IRestResponse>instância. Como ele retorna a Task, você pode usar a awaitpalavra-chave neste método e obter o Task<T>tipo retornado de (neste caso IRestResponse).
AH! Acho que eu: coração: você !! (E muito apropriado, considerando que é dia dos namorados). Isso seria MUITO bom para adicionar ao wiki RestSharp. Ok, então .. alguma chance de haver um PCL disso, também? Ou estou abusando da sorte?
Pure.Krome de
Não tenho certeza se uma versão PCL disso funcionaria, mas vou examiná-la no futuro. E eu concordo que seria bom adicionar ao wiki, não sei se tenho permissão para editá-lo (não sou um mantenedor regular da biblioteca).
Erik Schierboom
Talvez possamos obter @Haacked na conversa, talvez no Twitter?
Pure.Krome de
3
Como posso mapear para minha implementação IRestResponse personalizada?
jpgrassi
2
Como usei o Restsharp pela última vez na mesma época em que as ombreiras estavam em voga, os telefones rotativos eram a norma e todos nós adorávamos pegar nosso BBS favorito por meio de nosso modem Robotics 14,4k. Marca verde de resposta-aprovação, eu devo.
Pure.Krome de
3
No meu caso, tive que chamar Task.Wait () para que funcionasse corretamente. No entanto, usei a versão que não leva o CancelamentoTokenSource como parâmetro.
privatestaticasyncvoidMain(){var client =newRestClient();var request =newRestRequest("http://www.google.com");Task<IRestResponse> t = client.ExecuteTaskAsync(request);
t.Wait();var restResponse =await t;Console.WriteLine(restResponse.Content);// Will output the HTML contents of the requested page}
Ao usar, Waitvocê não está aproveitando o código assíncrono, apenas o está executando de forma síncrona.
The Muffin Man
No meu caso, chamar ExecuteTaskAsynk (com ou sem o token de cancelamento) não retorna e torna o IIS irresponsivo. Tive que usar este HACK até encontrar a causa.
Alex 75
Se você esperar, por que não usa a versão de sincronização da chamada ... inútil
Egli Becerra
1
Você não está liberando o Thread para ser usado em outro lugar? Em uma operação de longa duração na outra extremidade, isso é benéfico, não?
benmccallum de
sim, veio a resposta, se a resposta é válida, estou conseguindo a operação Async.
No meu caso, tive que chamar Task.Wait () para que funcionasse corretamente. No entanto, usei a versão que não leva o CancelamentoTokenSource como parâmetro.
fonte
Wait
você não está aproveitando o código assíncrono, apenas o está executando de forma síncrona.