前提・実現したいこと
Microsoft Azure Face APIに要求を出して、戻ってきたJSONから必要な情報を取得し、次の処理をしたいのですが、
「待つ」という処理について御教授お願いします。
発生している問題・エラーメッセージ
Face APIには、2度に分けて要求する必要があるのですが、最初の要求に対するレスポンスが返ってくる前に
「待つ」処理の仕方が判らず、要求に必要な情報不足のまま2回目のAPIを呼んでいる為、エラーになります。
{ "error": { "code": "BadArgument", "message": "Request body is invalid." } }
該当のソースコード
c#
1namespace FaceFormAPP 2{ 3 public partial class Form1 : Form 4 { 5 string imagefilepath; 6 string FaceId; 7 string MatchedName; 8 9 private void button2_Click(object sender, EventArgs e) 10 { 11 //送信したいイメージファイルのパスとファイル名imagefileppathを得ます。 12 openfile(); 13 //ファイルをFace APIに送信し、FaceIdを取得します。 14 AnalysisRequest(imagefilepath); 15 16 //得たFaceIdを基に該当する氏名を得ます。 17 //**非同期でAnalysisRequestを呼んでいるので 18 //下のルーチンを呼ぶときに必要なFaceIdがまだ確定していない時がある。 19 //なので、1回目のレスポンスが返って来てから下のルーチンを呼びたい。 20 FaceIdentify(); 21 } 22 23 private async void AnalysisRequest(string imageFilePath) 24 { 25 // Face APIの呼び出し 26 response = await client.PostAsync(uri, FaceId); 27 // 実行結果からJSONの取得 28 string jsonString = await response.Content.ReadAsStringAsync(); 29 FaceDetectRead = JsonSerializer.Deserialize<List<FaceDetect>>(jsonString)[0]; 30 FaceId = FaceDetectRead.faceId; 31 } 32 33 private async void FaceIdentify() 34 { 35 content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 36 37 response = await client.PostAsync(uri, content); //contentにFaceIdが必要 38 // 実行結果からJSONの取得 39 string jsonString = await response.Content.ReadAsStringAsync(); 40 // 41 //jsonStringから該当する氏名を得るルーチン 42 MatchedName = "取得した氏名"; 43 // 44 } 45 } 46}
試したこと
Task.Delay()を入れてみましたが、1回目のレスポンスが1秒以上かかるときもあり、上手くいかなかったです。
1回目のレスポンスが返って来てから、2回目の要求を出すにはどうすれば良いでしょうか?
private async void FaceIdentify() { await Task.Delay(1000);
補足情報(FW/ツールのバージョンなど)
Windows 10
Visual studio 2019
C#
Windows Form アプリケーション
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 13:50
2021/01/19 13:51
2021/01/19 21:21
2021/01/23 07:45