私が持っているものは、サーバーへの呼び出しを行うビューのAJAXフォームです。この呼び出しは、n個のタスクを実行します.nはデータベース内のレコードによって決まる番号です(通常は10レコード以下)。各レコードはTFSのBuild Definitionに対応しているので、これらのビルド定義をすべて取得し、TFSにキューイングし、各ビルドが完了するとUIが更新され、どのビルドが完了したかが分かります。非同期タスクでMVC3を使用してUIを更新する
残念ながら、これを行うにはどうすればよいかわかりません。私はこれらの線に沿って何かを考えていた:
foreach (var dep in builds)
{
TFS tfsServer = new TFS(TFS_SERVER_ADDRESS);
IBuildServer buildServer;
int id = tfsServer.QueuBuild(dep.TeamProject, dep.BuildDefinition);
string teamProject = dep.TeamProject;
Task.Factory.StartNew(() => GetBuildStatus(teamProject, id, tfsServer));
}
であると呼ばれているタスク:
private void GetBuildStatus(string TeamProject, int BuildID, TFS Server)
{
Server.GetBuildStatus(TeamProject, BuildID);
AsyncManager.OutstandingOperations.Decrement();
}
のすべてが持って構築されるまで、ここでの問題は私の完了メソッドが呼び出されますするつもりはないということです完了しました。一度に1つのUIにデータを戻す方法についてはどうすればよいですか? GetBuildStatusメソッドは次のように見えること
また、言及する価値がある:ビルドの期間は、この問題が発生している間、あなたが待っているブラウザを離れることができないHTTPリクエストのタイムアウトよりも長くなることを考えると
do
{
var build = buildsView.QueuedBuilds.FirstOrDefault(x => x.Id == BuildID);
if(build != null)
{
status = build.Status;
detail = build.Build;
}
} while (status != QueueStatus.Completed);
return detail.Status.ToString();