【やりたい事】
ASP.NET MVC で非同期実行して処理ができたら順次画面に表示させたい
(そもそも、出来るかどうかもわからないです。)
【具体的に困っている事】
Webスクレイピングを行うロジックを作成しました。
200リクエスト程なげて1リクエスト1秒程度で処理されます。
表示されるまで毎回200秒ほどかかってしまってストレスなので、処理が終わったものから順次画面に表示させたい。
表示順序は問いません。
【現在の実装】
HttpClientクラスでリクエストを作成して、非同期で処理をさせています。
ボタンを一回押すと200リクエストが投げられ、正しく処理されれば ajax で動的にテーブルに行追加させています。
なので今は、ボタンを一回押して200秒待っている状態です。
【考えたこと】
- 案1 コントローラーからIEnumerable<Task<Hoge>>型で返すようにする
コントローラーから順次値を返して、cshtml側で処理させたいと考えるのであれば、Taskをyield returnさせてやるだけでよいと考えましたが、できないようです。
- 案2 ViewDataにデータを突っ込んでやる
簡単にこういうイメージでした。
controller
1public async Task<IActionResult> Index() 2{ 3 var memos = new List<string>(); 4 foreach (var article in _context.Articles) 5 { 6 await Task.Delay(1000); 7 memos.Add(article.Memo); 8 ViewData["memos"] = memos; 9 } 10 return View(); 11}
cshtml
1@foreach (var memo in ViewData["memos"] as IEnumerable<string>) 2{ 3 <p>@memo</p> 4}
これをやってみても、意図した結果は得られませんでした。
(そりゃそうかという感じですが。)
もし、解決方法があれば教えてほしいです。
よろしくお願い致します。
あなたの回答
tips
プレビュー