및와 함께 RestSharp를 사용하는 비동기 C # 코드의 최신 예제를 찾기 위해 고군분투 async
하고 await
있습니다. 나는이 것을 알고 Haack의 최근 갱신하고 있지만 새로운 방법을 사용하는 방법을 모르겠어요.
또한 작업을 취소 할 수 있도록 취소 토큰을 제공하려면 어떻게해야합니까 (예 : 사람이 기다리는 데 지쳐서 앱 UI에서 취소 버튼을 누르는 경우).
답변
글쎄요, Haack이 언급하는 업데이트는 제가 만든 것입니다. 실제로 사용하는 방법을 보여 드리겠습니다. 실제로 매우 간단합니다. 이전에는
ExecuteAsyncGet
라는 RestSharp 사용자 지정 유형을 반환하는 것과 같은 메서드가있었습니다 RestRequestAsyncHandle
. 이 유형은 async/await
작업 Task
및 Task<T>
반환 유형 으로 기다릴 수 없습니다 . 내 풀 요청은 Task<T>
인스턴스 를 반환하는 기존 비동기 메서드에 오버로드를 추가했습니다 . 이러한 Task<T>
오버로드에는 이름에 추가 된 “작업”문자열 이 있습니다. 예를 들어에 대한 Task<T>
오버로드 ExecuteAsyncGet
는라고 ExecuteGetTaskAsync<T>
합니다. 각각의 새 Task<T>
오버로드에 대해 CancellationToken
를 지정할 필요가없는 메서드가 하나 있고 지정 되는 메서드 가 있습니다.
이제 사용 방법에 대한 실제 예제를 살펴보면 다음과 같이 사용하는 방법도 보여줍니다 CancellationToken
.
private static async void Main()
{
var client = new RestClient();
var request = new RestRequest("http://www.google.com");
var cancellationTokenSource = new CancellationTokenSource();
var restResponse =
await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);
// Will output the HTML contents of the requested page
Console.WriteLine(restResponse.Content);
}
인스턴스 ExecuteTaskAsync
를 반환하는 오버로드를 사용합니다 Task<IRestResponse>
. 를 반환 하므로이 메서드에 키워드를 Task
사용하고 의 반환 된 유형 (이 경우 )을 반환 할 수 있습니다 .await
Task<T>
IRestResponse
코드는 여기에서 찾을 수 있습니다. http://dotnetfiddle.net/tDtKbL
답변
제 경우에는 제대로 작동하려면 Task.Wait ()를 호출해야했습니다. 그러나 CancellationTokenSource를 매개 변수로 사용하지 않는 버전을 사용했습니다.
private static async void Main()
{
var client = new RestClient();
var request = new RestRequest("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
}