7

asyncメソッド(xmlHelper.LoadDocument())を呼び出す静的メソッドがあります。セッターセクションのプロパティでこのメソッドを呼び出します

internal static IEnumerable<Word> LoadTenWords(int boxId)
{
     XmlHelper xmlHelper = new XmlHelper();
     XDocument xDoc = xmlHelper.LoadDocument().Result;
     return xDoc.Root.Descendants("Word").Single(...)
} 

ご存知のように、LoadTenWordは静的であり、非同期メソッドにすることはできないため、Resultプロパティを使用してLoadDocumentを呼び出します。アプリを実行するとアプリケーションは機能しませんが、デバッグして次の行で待機します

XDocument xDoc = xmlHelper.LoadDocument().Result;

全て大丈夫!!!キーワードがなければ、C#はプロセスが完全に終了するのを待たないと思います。await

私の問題を解決するための提案はありますか?

4

1 に答える 1

14

メソッドがであるという事実は、それがとしてマークできないことを意味するものではstaticありませasync

internal static async Task<IEnumerable<Word>> LoadTenWords(int boxId)
{
    XmlHelper xmlHelper = new XmlHelper();
    XDocument xDoc = await xmlHelper.LoadDocument();
    return xDoc.Root.Descendants("Word").Select(element => new Word());
}

結果を使用Resultすると、タスクが完了するまでメソッドがブロックされます。あなたの環境ではそれが問題です。ブロックするのではなく、単にタスクをブロックする必要がありawaitます(または、継続を使用して結果を処理しますが、awaitはるか簡単です)。

于 2012-11-26T17:22:19.153 に答える