0
私が最終的に達成しようとしているのは、GetPage(i)
がページi
のHTMLを返す未知であるが限定された数のWebページからHTMLを取得することで、非ページが見つかるとすぐに停止したい。C#でこの並列パターンを実装するにはどうすればよいですか?
私は行くよ、正確なパターンは、このようなものです:
- スタート
GetPage(0)
あるN
並列タスク、...、GetPage(N-1)
。 - タスク
GetPage(i)
が完了すると、タスクがページを取得できた場合は、そのページをページのコレクションに追加し、まだ処理しようとしていない次の最大ページを取得しようとします。タスクがページを取得できなかった場合は、すべてのタスクをキャンセルします。GetPage(j)
j>i
。
だから私の未遂実装は、これはあなたが探しているものかもしれません
var docs = new LinkedList<HtmlDocument>();
int tlimit = 20;
var tasks = new Task<HtmlDocument>[tlimit];
for(int i = 0; i < tlimit; ++i)
{
tasks[i] = Task<HtmlDocument>.Factory.StartNew(() => BoardScanner.GetBoardPage(i));
}
/// ???
説明。 「タスクGetPage(i)が完了すると、タスクがページを取得できた場合は、そのページをページのコレクションに追加し、まだ処理しようとしていない次のページを取得しようとする」 - これは、ページの順次処理。あなたはこのプロセス全体を非同期的に行うかもしれません。 – agfc