데이터베이스에 연결하기 위해 순차적으로 통과하는 포트 목록이 있습니다. 일반적으로 작동하는 기본 포트가 있지만 비표준 포트 (가시성이없는 포트)를 사용하는 연결이 있습니다. 약 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();
}
}
);
헬퍼 클래스 ConnectInfo,
아래 정의된다class ConnectInfo
{
ConnectInfo(serverName, databaseName, port) {}
State { get; set; }
DbConnection { get; set; }
}
및 ConnectionState만을 들고 열거되고 : 실패하거나 SUCCESSFUL. (나는 단지 성공 상태를 얻는 것에 관심이있다).
내 생각에 1 포트에 연결하는 데 성공하면 첫 번째 기회에 정보 (서버, 데이터베이스, 포트 및 연결)를 사용하지 못하게됩니다.
이 작업을 올바르게 수행하고 있습니까 (특히 Parallel.For 루프를 벗어나는 경우)?
나에게 맞는 것 같습니다. –
효과가 있습니까? 어떤 문제가 있습니까? – svick
내 문제는 ConcurrentStack 컬렉션입니다. 알고리즘이 없어도 여전히 알고리즘이 올바를 것입니까? 나는 주로 '커넥터'변수에 값 충돌이있을 가능성이있을 때이를 사용합니다. – ehmBEE