###前提・実現したいこと
ASP.NET MVC5の環境でWebアプリケーションを制作しています。
以下の流れで、サーバーサイドからクライアントへデータを返そうとしています。
1.外部のAPIにアクセスしてデータを取得
2.取得したデータから任意のデータIDを抽出
3.データIDと一致するデータをローカルDBから取得する
4.3の結果をAPIコントローラーを利用してクライアントへ返す
###発生している問題・エラーメッセージ
以下のソースコードを書きましたが、
デバックしたところ、Taskの完了待ち以降の処理に移りません。
非同期メソッドの完了をまってから、次の処理を実行したい場合、私のコードではそもそも考え方が違ったりするのでしょうか?
###該当のソースコード
///////////////////////////////////////////////////////////////
4.3の結果をAPIコントローラーを利用してクライアントへ返す
///////////////////////////////////////////////////////////////
public class AnswerApiController : ApiController { public List<Model> GetModel() { QAManager qam = new QAManager(); //外部のAPIにアクセスしてデータを取得 //取得したデータから任意のデータIDを抽出 qam.ContactAPI().Wait(); **⇒ここでTask(ContactAPI()メソッド)が完了するのをまってから、次のステートメントへ移りたいです。 そのため、Waitメソッドを実行しているのですが、次のステートメントに移りません。 ** //データIDと一致するデータをローカルDBから取得してセットする qam.CreateModelList(); return qam.ModelList; } }
///////////////////////////////////////////////////////////////
1.外部のAPIにアクセスしてデータを取得
2.取得したデータから任意のデータIDを抽出
3.データIDと一致するデータをローカルDBから取得して返す
以上の3つを実現するクラス
///////////////////////////////////////////////////////////////
public class QAManager { //データID public string DataID {get; set;} //ローカルDBからデータIDと一致するレコードを抽出したデータを保持するリスト public List<自作モデル> ModelList { get; set; } /// <summary> /// 外部のAPIにアクセスしてデータを取得。 /// 取得したデータから任意のデータIDを抽出 /// </summary> public async Task ContactAPI() { var TARGETURL = "https://-------"; HttpClient client = new HttpClient(); //ユーザとパスワードをセットする。 var byteArray = Encoding.ASCII.GetBytes("userID:password"); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); //外部APIから結果を取得 var response = await client.GetAsync(TARGETURL); HttpContent content = response.Content; //このあと 取得したデータから任意のデータIDを抽出する DataID = ----省略----- } /// <summary> /// データIDと一致するデータをローカルDBから取得してセットする /// </summary> public void CreateModelList() { using(myDbContext db = new myDbContext()) { ModelList = db.Answers.Where(x => x.id == DataID).ToList(); } } }
###補足情報(言語/FW/ツール等のバージョンなど)
ASP.NET MVC5
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/04 00:15
2016/10/07 13:09
2016/10/21 05:29