Вот код, ответственность за который connect
перед сервером и get
некоторые детали.
public class MigrationManager
{
private string referenceServerId;
public void MigrateAnalyzer(string serverid)
{
Gw _Gw = new Gw() // library reference
_Gw.onConnectSucceeded += Handle_OnConnectSucceeded;
_Gw.onConnectFailed += Handle_OnConnectFailed;
ConnectToServer(prxHA, serverid);
}
private void ConnectToServer(string sid)
{
workstationIDForReference = anayzer;
string credentials = GWServiceCredentials("somesecret");
referenceServerId = sid;
_Gw.connectToServer("SSL", "device1-mydomain.net", credentials, referenceServerId);
}
}
Эта операция подключения может завершиться в двух сценариях.
- Успешное соединение
- Ошибка подключения
Эти события обрабатываются, как показано ниже
private void Handle_OnConnectFailed(int hr)
{
string msg = $"{referenceServerId}";
Console.WriteLine("Connecting to server {0} is failed", msg);
}
private void Handle_OnConnectSucceeded()
{
Console.WriteLine("Connecting to server is success");
}
Это хорошо работает. Теперь я изменяю его для поддержки многопоточности. Потому что есть несколько запросов на подключение к серверу.
List<string> requestCollection = new List<string>();
requestCollection.Add("I3-1");
requestCollection.Add("I3-2");
requestCollection.Add("I3-3");
var taskList = new List<Task>();
foreach (var serverid in requestCollection )
{
MigrationManager manager = new MigrationManager();
var task = Task.Factory.StartNew(() => manager.MigrateAnalyzer(serverid.ToString()));
}
Task.WaitAll(taskList.ToArray());
см. Ниже Выход
Console.WriteLine("Connecting to server I3-1 is failed");
Console.WriteLine("Connecting to server I3-2 is failed");
Console.WriteLine("Connecting to server I3-3 is failed");
Вывод выглядит хорошо!
Но, я думаю, COM будет использовать общие ресурсы. так как мне использовать "блокировку"?