c# - 使用 Task.Factory 时共享资源
问题描述
这是对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 将使用共享资源。那么我该如何使用“锁”呢?
解决方案
推荐阅读
- python - 使用 BeautifulSoup4 从 HTML 中提取字段
- ethereum - Solidity,私有函数不能返回值
- php - 如何在socket php中制作计时器
- css - 不确定表单字段的“焦点”是什么
- javascript - Firebase admin SDK + Vue + Webpack,TypeError: rtdb.initStandalone is not a function
- vb.net - 尝试通过 VB 表单将新记录提交到访问文件 [.mdb]
- reactjs - Moment.js 正在使用 React Big Calendar 将 Date 转换为 Today 日期
- excel - 使用可变单元格值过滤多个工作表
- python - Django以相同的形式保存多个数据 - 不同用户的不同数据
- python - Dask延迟/ dask数组无响应