私は使用可能な言語をフェッチするAPIエンドポイントを構築しました。私のMVC
アプリケーションでは、言語を非同期にフェッチするヘルパーがいます。私は、ユーザーが選択できる利用可能な言語のリストにドロップダウンリストをバインドしたい私のView
でgetter内部で非同期メソッドを呼び出すと例外がスローされます
public static async Task<Languages> GetLanguagesAsync()
{
var apiResponse = await APIHelper.GetContentGetAsync("Languages").ConfigureAwait(false);
return apiResponse.LanguagesDataModel;
}
:メソッドは次のように定義されています。
Html.DropDownListFor @(M => m.Language、LanguageHelper.AvailableLanguages)
getter
は、以下の定義されます。
public static IEnumerable<SelectListItem<string>> AvailableLanguages
{
get
{
var result = GetLanguagesAsync().Result;
return new List<SelectListItem<string>>(result.Languages.Select(l => new SelectListItem<string> {Value = l.Key, Text = l.Value}));
}
}
しかし、私はいつものエラーが出ますhereからの最も上に上げられた答えである行var result = GetLanguagesAsync().Result;
。
スローされた例外は、非同期操作は、この時点で開始することはできません
です。非同期操作は、非同期ハンドラまたはモジュール内、またはページライフサイクルの特定のイベント中にのみ開始できます。ページの実行中にこの例外が発生した場合は、Pageが<%@ Page Async = "true"%>とマークされていることを確認してください。この例外は、ASP.NET要求処理では一般的にサポートされていない「非同期void」メソッドの呼び出しを示す可能性があります。代わりに、非同期メソッドはTaskを返す必要があり、呼び出し元はそれを待つ必要があります。
hereと同様に、呼び出されたアクションはasync
とマークされます。
メッセージが十分にクリアではありませんか?あなたのページで '<%@ Page Async =" true "%>'指示文を使う必要があります。最新のバージョンではこれが必要ないため、古いASP.NET MVCバージョンを使用していると思われます。これは 'async/await'キーワードとは関係ありません。 –
'.Result'を使わず、' await GetLanguagesAsync() 'を使用してください。 – Mafii
@Mafli非同期のプロパティはありません –