4
我有一個端口列表,爲了連接到數據庫,我順序地通過端口。通常,有一個默認端口可以工作,但有些連接使用非標準端口(我沒有任何可見性)。其中大約有20-30人,並且順序經歷他們需要很長時間。如何實現Parallel.For正確地獲取正確的狀態?
下面,我讓我的第一個試圖並行連接到端口的順序算法。
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();
}
}
);
helper類,ConnectInfo,被定義如下:
class ConnectInfo
{
ConnectInfo(serverName, databaseName, port) {}
State { get; set; }
DbConnection { get; set; }
}
和ConnectionState是一個枚舉只持有:失敗或成功的。 (我只對獲得成功的狀態感興趣)。
我的想法是,如果成功獲得與1端口的連接,它將首次獲得有關信息(服務器,數據庫,端口和連接)的信息。
我是否正確地做這件事(特別是離開Parallel.For循環)?
對我來說似乎是正確的。 –
它適合你嗎?你遇到任何問題嗎? – svick
我的問題是與ConcurrentStack集合。沒有它,算法仍然是正確的嗎?我主要使用它來避免'連接器'變量發生值衝突。 – ehmBEE