私はRestSharpを使用して、いくつかの非同期C#コードの近代的な例を見つけるのに苦労してるasync
とはawait
。私はあります知っているハークによる最近更新されて、私は新しいメソッドを使用する方法がわかりません。
また、操作をキャンセルできるようにキャンセルトークンを提供するにはどうすればよいですか(たとえば、人が待っていることにうんざりしていて、アプリのUIの[キャンセル]ボタンを押した場合)。
私はRestSharpを使用して、いくつかの非同期C#コードの近代的な例を見つけるのに苦労してるasync
とはawait
。私はあります知っているハークによる最近更新されて、私は新しいメソッドを使用する方法がわかりません。
また、操作をキャンセルできるようにキャンセルトークンを提供するにはどうすればよいですか(たとえば、人が待っていることにうんざりしていて、アプリのUIの[キャンセル]ボタンを押した場合)。
回答:
ええと、Haackが参照している更新は私が行ったものです:)だから、実際には非常に簡単なので、その使用方法を紹介しましょう。以前はExecuteAsyncGet
、という名前のRestSharpカスタムタイプを返すようなメソッドがありましたRestRequestAsyncHandle
。この型は、戻り値の型でasync/await
機能するためTask
、待つことができませんでしたTask<T>
。私のプルリクエストは、Task<T>
インスタンスを返す既存の非同期メソッドにオーバーロードを追加しました。これらのTask<T>
オーバーロードには、名前に「タスク」文字列が追加されています。たとえば、のTask<T>
オーバーロードExecuteAsyncGet
はと呼ばれExecuteGetTaskAsync<T>
ます。新しいTask<T>
オーバーロードごとに、a CancellationToken
を指定する必要のないメソッドが1つあります。
それでは、それを使用する方法の実際の例に進みます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
非同期コードを利用せずに使用することで、同期的に実行するだけです。