0

この質問にはすでに答えがあります。

私はasychメソッドとして宣言しているメソッドを持っています。コードは以下のとおりです。

private async Task<string> tempPassword()
{
    char[] hashes = "ABCDEFGHJKMNPQRUVWXY34689!?@$#".ToCharArray();
    Random r = new Random(DateTime.Now.Millisecond);
    List<char> bits = new List<char>();
    while (bits.Count < 7)
    {
         int i = r.Next(0, hashes.Length);
         if (!bits.Contains(hashes[i]))
              bits.Add(hashes[i]);
    }
    return string.Join("", bits.ToArray());
}

このコードは正しくコンパイルされていますが、Visual Studioでは次のようなフィードバックがあります。

この非同期メソッドには待望の演算子がなく、同期的に実行されます。   await演算子を使用して、ノンブロッキングAPI呼び出しを待つことを検討します。   バックグラウンドスレッドでCPUバウンドの作業を行うための 'await Task.Run(...)'。

私は非同期の豊富なバックグラウンドを持っていませんが(これは私がそれを使っている理由です、正直に言うと、学習します)、待機メソッドを必要とするようなものがこのメソッドにあるようには思われません。私はそれが私が待ち望んでいることになっているものに関して少し混乱しています。


  • コードに非同期はありません。したがって、非同期としてマークするべきではありません。それが、コンパイラがあなたに伝えようとしていることです。署名をに変更するだけです。private string tempPassword() - shay__

1 답변


1

このメソッドにawaitオペレータを必要とするものがあるようには思われません。

その場合、なぜその方法はasyncそもそも?あなただけが必要ですasyncあなたが使用する場合await。現在の状態では、メソッドは同期的に実行され、既に完了したコードを返します。Task<string>。非同期にする必要がないと思われる場合は、そのシグネチャを単に返すだけに変更できます。string。将来非同期になることが予想される場合(または、インターフェースを実装しているか、基本クラスのメソッドをオーバーライドしているために戻り値の型を変更できない場合)、async修飾子を入力し、完了したタスクを明示的に返します。

return Task.FromResult(string.Join("", bits.ToArray()));

これにより、非同期ステートマシンを作成することによるオーバーヘッドを回避できます。

リンクされた質問


関連する質問

最近の質問