我如何实现并行.正确地得到正确的状态

本文关键字:状态 正确地 并行 何实现 实现 | 更新日期: 2023-09-27 18:12:48

我有一个端口列表,为了连接到数据库,我要依次通过这些端口。通常,有一个默认的端口可以工作,但也有使用非标准端口的连接(我没有任何可见性)。大约有20-30个,按顺序完成它们需要很长时间。

下面,我做了我的第一个尝试并行顺序算法连接端口。

nonStdPorts = {...}; // list of all non-standard ports (max: 30); 

ConnectionState state = ConnectionState.FAIL; 
ConcurrentStack<ConnectInfo> results = new ConCurrentStack<ConnetInfo>(); 
// Assume single instance. Add an outer for-loop if multiple instances are present. 
Parallel.For(0, nonStdPorts.Length, (i, loopState) =>
    {
        ConnectInfo connector = new ConnectInfo(serverName, databaseName, port); 
        connector.State = TryConnect(serverName, databaseName, nonStdPorts[i], ref   dbConnection);  
        results.Push(connector); 
        if (connector.State == ConnectionState.SUCCESSFUL) 
        {
            loopState.Stop(); 
        }
    }
); 

辅助类ConnectInfo定义如下:

class ConnectInfo 
{
   ConnectInfo(serverName, databaseName, port) {} 
   State { get; set; } 
   DbConnection { get; set; } 
}

和ConnectionState是一个只包含:FAIL或success的枚举。(我只对获得成功状态感兴趣)。

我的想法是,如果它成功地获得一个连接到1端口,它将保释与信息(服务器,数据库,哪个端口和连接)在第一次机会。

我这样做是正确的吗?For循环)?

我如何实现并行.正确地得到正确的状态

对于并行解,ref dbConnection看起来非常明显。

您可能不需要ref,并且数据库连接通常不能在线程之间共享。