-, , COM- . . , STA, , , , - . MTA, GetUser, .
, 1 ThreadPool . .
public MyUser[] GetUsers(string appName, string[] names)
{
int count = 1;
var finished = new ManualResetEvent(false);
var users = new List<User>();
foreach (string user in names)
{
Interlocked.Increment(ref count);
ThreadPool.QueueUserWorkItem(
(state) =>
{
try
{
MembershipUser mu = this.ADAMProvider.GetUser(user, false);
if (mu != null)
{
lock (users)
{
users.Add(MyUser.CreateFrom(mu);
}
}
}
finally
{
if (Interlocked.Decrement(ref count) == 0) finished.Set();
}
});
}
if (Interlocked.Decrement(ref count) == 0) finished.Set();
finished.WaitOne();
return users.ToArray();
}
, , , (, ), . . , Set WaitOne.
, , TPL .NET 3.5 Reactive Extensions .
1 , , , .