및와 함께 RestSharp를 사용하는 비동기 C # 코드의 최신 예제를 찾기 위해 고군분투 async
하고 await
있습니다. 나는이 것을 알고 Haack의 최근 갱신하고 있지만 새로운 방법을 사용하는 방법을 모르겠어요.
또한 작업을 취소 할 수 있도록 취소 토큰을 제공하려면 어떻게해야합니까 (예 : 사람이 기다리는 데 지쳐서 앱 UI에서 취소 버튼을 누르는 경우).
및와 함께 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
}
Wait
하면 비동기 코드를 활용하지 않고 동기식으로 실행하는 것입니다.