非同期処理をキャンセルするには – IAsyncInfo

IAsyncInfo Cancelメソッド

WindowsRuntimeの場合、IAsyncAction、IAsyncActionWithProgress、IAsyncOperation、IAsyncOpearationWithProgressの4つの非同期メソッドインターフェースが存在します。

それらはすべてIAsyncInfoインターフェースを継承しているため、非同期処理キャンセル能力を持っています。

 

もし非同期処理中にキャンセルリクエストが来た場合、IsCancellationRequestedプロパティがtrueとなるのでそれを判定して非同期メソッドを止めるように実装します。

private IAsyncAction StartAsyncActionAsync()
{
    return AsyncInfo.Run((token) =>
    {
        return Task.Run(() =>
        {
            //すごく重い処理
            for (int i = 0; i < 20; i++)
            {
                if (token.IsCancellationRequested)
                {
                    return;
                }
                else
                {
                    var client = new HttpClient();
                    client.GetStringAsync("http://google.co.jp").Wait();
                }
            }
            
        });
    });
}

あとは非同期メソッド実行中にCancelメソッドを呼べば処理がキャンセルされます。

private IAsyncAction asyncTask;

private void CancelAsyncMethod()
{
    //キャンセル
    asyncTask.Cancel();
}

private async void StartAsyncMethod()
{
     //非同期処理実行
     asyncTask = StartAsyncActionAsync();
     await asyncTask;
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください