[c#] async / await와 함께 RestSharp를 사용하는 방법

및와 함께 RestSharp를 사용하는 비동기 C # 코드의 최신 예제를 찾기 위해 고군분투 async하고 await있습니다. 나는이 것을 알고 Haack의 최근 갱신하고 있지만 새로운 방법을 사용하는 방법을 모르겠어요.

또한 작업을 취소 할 수 있도록 취소 토큰을 제공하려면 어떻게해야합니까 (예 : 사람이 기다리는 데 지쳐서 앱 UI에서 취소 버튼을 누르는 경우).



답변

글쎄요, Haack이 언급하는 업데이트는 제가 만든 것입니다. 🙂 실제로 사용하는 방법을 보여 드리겠습니다. 실제로 매우 간단합니다. 이전에는 ExecuteAsyncGet라는 RestSharp 사용자 지정 유형을 반환하는 것과 같은 메서드가있었습니다 RestRequestAsyncHandle. 이 유형은 async/await작업 TaskTask<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사용하고 의 반환 된 유형 (이 경우 )을 반환 할 수 있습니다 .awaitTask<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
}


답변