別のサードパーティ サービスを呼び出すためにマルチ スレッドを実装する必要がある WCF サービスを作成しています。
LINQ を使用して「リスト」を作成し、オブジェクトのリストをクライアントに送信しています。
「MyObject」には 5 つのプロパティがあります。
- 3 テーブルに静的に格納
- 2 サードパーティ サービスによって動的に計算されます。
30 秒のタイムアウトで、2 つの動的プロパティを読み取るためにスレッドを生成する必要があります。例:
リストに 6 つのオブジェクトがある場合、
- 2 つのプロパティのそれぞれに対してサード パーティ サービスを呼び出す、非同期で並列に実行される 6 つのスレッドを生成する必要があります。
- 30 秒以内にすべての結果が得られたら、6 つのオブジェクトとすべてのプロパティをクライアントに送信します。
- 30 秒以内にどのオブジェクトのプロパティも受信しない場合は、そのオブジェクトのプロパティを NULL に設定し、オブジェクトのリストをクライアントに返す必要があります。
私のコードは次のようになります。
List<Dials> lstDial = new List<Dials>();
foreach(var c in dialsToShow)
{
int threadId;
AsyncMethodCaller caller =
new AsyncMethodCaller(MyMethodThatCalls3rdPartyService);
IAsyncResult result = caller.BeginInvoke(userName, out threadId, null, null);
while (!result.AsyncWaitHandle.WaitOne(30000, false))
avgBI = caller.EndInvoke(out threadId, result);
property4 = avgBI[0];
property5= avgBI[1];
var dashboardObj = _repository.FindQueryable<DashboardDial_Tbl>()
.Select(p => new DialDetails()
{
Id = p.DialId,
Name= p.DialName,
Type = p.DialType,
IndividualStat = property4,
GroupStat = proprty5
}).SingleOrDefault();
dials.Add(dashboardObj);
}
reponse.dialsList = dials;
サードパーティ サービスを呼び出すメソッドにはデリゲートがあります。次のようになります。
public delegate List<string> AsyncMethodCaller(
string methodName, out int threadId);
private List<string> MyMethodThatCalls3rdPartyService(
string userName, out int threadId)
{
//Call the service
}
別の方法でマルチスレッドを使用してこれを達成するのを手伝ってもらえますか? .Net 4.0 と VS2012 を使用しています。