1

非同期で実行したい単純なコードがあります。

public async Task EncryptAsync()
{
    for (int i = 0; i < 10; i++)
    {
        // shift bytes
        // column multiplication
        // and so on
    }
}

それが私が上記の方法を呼び出す方法です:

private async void Encryption()
{
    ShowBusyIndicator();

    await encryptor.EncryptAsync();

    HideBusyIndicator();
}

ポイントは、await Task.Delay(1000);このメソッドを追加すると、busi インジケーターが表示されますが、1 秒後にアプリケーションがロックされ、暗号化が完了するまで同期して待機することです。Task.Delay を削除すると、操作が終了した後にアプリケーションがロックおよびロック解除されます。

私の場合、適切に await と asyc を使用するにはどうすればよいですか? メソッドをencryptor.EncryptAsync()非同期で実行するだけです。

4

1 に答える 1

4

async/キーワードでは、新しい非同期を作成awaitできません。代わりに、既存の非同期操作が完了するのを待つだけです。

UI のブロックを回避するために、バックグラウンド スレッドで CPU バウンド操作を実行する必要があります。
これを行うには、に渡されたラムダ内で同期ブロッキング メソッドを呼び出しますTask.Run()

awaitその後、結果の非同期操作 (Taskインスタンス)を待機するために使用できます。

于 2013-06-02T19:57:40.510 に答える