async
とawait
を指定してRestSharpを使用する非同期C#コードの最新の例を見つけるのに苦労しています。 Haackによる最近の更新である があることは知っていますが、新しいメソッドの使用方法はわかりません。
また、操作をキャンセルできるようにキャンセルトークンを提供するにはどうすればよいですか(たとえば、ユーザーが待機にうんざりしていて、アプリのUIで[キャンセル]ボタンを押した場合)。
さて、Haackが参照している更新は私によって行われたものです:)実際には非常に単純なので、使用方法を説明しましょう。以前は、ExecuteAsyncGet
という名前のRestSharpカスタムタイプを返すRestRequestAsyncHandle
などのメソッドがありました。 async/await
はTask
およびTask<T>
戻り値の型で機能するため、この型は待ち切れませんでした。私のpull-requestは、Task<T>
インスタンスを返す既存の非同期メソッドにオーバーロードを追加しました。これらのTask<T>
オーバーロードには、名前に追加された「タスク」文字列が追加されています。たとえば、ExecuteAsyncGet
のTask<T>
オーバーロードは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);
}
これは、Task<IRestResponse>
インスタンスを返すExecuteTaskAsync
オーバーロードを使用します。 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
}