私は以下のコードを理解すると、最終的に他のコードを実行している間に文字列classification
を取得する必要があります。私はawait classification
上のエラーを取得するしかし私のasync/awaitについての理解は正しいですか?
[HttpPost]
public async Task<ActionResult> CreatePropertyAsync(Property property)
{
string classification = GetClassification(property);
// GetClassification() runs a complex calculation but we don't need
// the result right away so the code can do other things here related to property
// ... code removed for brevity
property.ClassificationCode = await classification;
// all other code has been completed and we now need the classification
db.Properties.Add(property);
db.SaveChanges();
return RedirectToAction("Details", new { id = property.UPRN });
}
public string GetClassification(Property property)
{
// do complex calculation
return classification;
}
public async Task<string> GetNameAndContent()
{
var nameTask = GetLongRunningName(); //This method is asynchronous
var content = GetContent(); //This method is synchronous
var name = await nameTask;
return name + ": " + content;
}
から以下のコードと同じように動作するはずです:「string」は「GetAwaiter」
の定義が含まれていません。なぜこれが起こっているのか分かりません。
はまた、私が代わりに使用する必要があり、高価な計算のためのMSDN docsに従って:
property.ClassificationCode = await Task.Run(() => GetClassification(property));
を、これは実際に私が欲しいものを達成することや、これはとにかく同期動作していますか?
ご協力いただきありがとうございます。
とを読んでいますhttps://stackoverflow.com/q/47285836/23354 –
MSDNページはASP.NETに関するものではありません。 –
async/awatに関するあなたの理解は間違っていますが、より真剣にServer側のプログラミングについてのあなたの理解にも欠陥があります。非同期I/Oの場合は、待機中のチェーンに追加します。 CPUバインドされた作業については、何もしないでください。それは正しいですか?https://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx –