3

ファイルを読み取るための次のコードがあります。

private void ReadFile()
{
    using (StreamReader reader = File.OpenText("data.txt"))
        {
            while ((currentline = reader.ReadLine()) != null)
            {
                currentline = currentline.ToLower();
                currentline = RemoveChars(currentline);
                currentline = RemoveShortWord(currentline);
                AddWords(currentline);
            }
        }
    }

大きなファイルに対して非同期でファイルを読みたいのですが、ここでそれを行う方法がわかりません。正しい方向を指していただけますか。

これは私が非同期にしようとしたものです:

    private async void ReadFile()
    {

        using (StreamReader reader = File.OpenText("dickens.txt"))
        {
            while ((currentline =  await reader.ReadLineAsync()) != null)
            {
                currentline = currentline.ToLower();
                currentline = RemoveChars(currentline);
                currentline = RemoveShortWord(currentline);
                AddWords(currentline);
            }
        }
    }

私のAddWordsメソッドが機能していないようです(非同期を使用している場合)。このメソッドは単語を辞書に追加します。

    private void AddWords(string line)
    {
        string[] word = line.Split(' ');

        foreach (string str in word)
        {
            if (str.Length >= 3)
            {
                if (dictionary.ContainsKey(str))
                {
                    dictionary[str]++;
                }
                else
                {
                    dictionary[str] = 1;
                }

            }
        }
    }
4

1 に答える 1

3

避けてくださいasync voidasyncメソッドが is を返すのと同じことは、 voidisasync Taskではなくasync voidです。

辞書を使用する前に結果を変更private async void ReadFile()してprivate async Task ReadFileAsync()ください。await

于 2012-12-19T01:42:06.423 に答える