私は以下の方法があります:非同期メソッドから非同期メソッドを呼び出す方法
public string RetrieveHolidayDatesFromSource() {
var result = this.RetrieveHolidayDatesFromSourceAsync();
/** Do stuff **/
var returnedResult = this.TransformResults(result.Result); /** Where result gets used **/
return returnedResult;
}
private async Task<string> RetrieveHolidayDatesFromSourceAsync() {
using (var httpClient = new HttpClient()) {
var json = await httpClient.GetStringAsync(SourceURI);
return json;
}
}
上記の作業と適切に結果を返しませいるようだありません。私は結果を待つ声明がどこにないのか分からないのですか? RetrieveHolidayDatesFromSource()メソッドが文字列を返すようにします。
以下はうまく動作しますが、同期していて、改善できると思いますか?以下は同期ですが、私は非同期に変更したいのですが、何らかの理由で頭を包み込むことができません。
public string RetrieveHolidayDatesFromSource() {
var result = this.RetrieveHolidayDatesFromSourceAsync();
/** Do Stuff **/
var returnedResult = this.TransformResults(result); /** This is where Result is actually used**/
return returnedResult;
}
private string RetrieveHolidayDatesFromSourceAsync() {
using (var httpClient = new HttpClient()) {
var json = httpClient.GetStringAsync(SourceURI);
return json.Result;
}
}
何か不足していますか?
注:上記の非同期メソッドをブレークポイントすると、 "var json = await httpClient.GetStringAsync(SourceURI)"という行に達したときに何らかの理由でブレークポイントから外れてしまい、メソッド。
'publicタスク RetrieveHolidayDatesFromSourceAsync()'に 'await'がありませんか? –
@NickWeaver:いいえ、非同期ではないので、 'await'を使うことはできません。 –
私は参照してください。メソッドの名前が最後に "Async"と書かれていたので、私は疑問に思っていました。なぜ非同期に設定されていないのですか? –