그 중 하나만 유효한 데이터베이스 연결 목록이 있습니다. 응용 프로그램이 응용 프로그램에 연결하여 입력 userId를 기반으로 사용자 정보를 가져와야합니다.Parallel.ForEach 중지 또는 휴식 시간이 너무 오래 걸림
private string GetDatabaseId(string userId)
{
string dbId = string.Empty;
Parallel.ForEach(dictionaryAllDatabases, (db, state) =>
{
user = GetUserFromDatabase(db.Key, userId);
if (user != null)
{
//we found user in database.set the db.Id and exit the loop
//it takes only 500 milliseconds to hit this line
dbId = db.Key;
state.Stop();
return;
}
}
);
//after about 15 seconds, we reach here
.....
}
는 그것이 유효한 데이터베이스를 발견 미만 500 밀리 초를 소요하고 나는 루프를 종료() state.Stop를 호출합니다. 루프를 종료하는 데 약 15 초가 걸립니다.
내가 잘못 했나요? 나는 당신은 아마 실패 할 다른 작업의 연결을 기다리고 Parallel.For
이전 요청이 완료 될 때까지 기다리는 동안 동일한 데이터베이스 인스턴스와 잠금을 재사용하고있을 가능성이 있습니까? – Prix
아니요, 모든 데이터베이스가 다릅니다. 내 응용 프로그램이 그들 중 일부에 액세스하지 않기 때문에 나는 시간 초과 또는 액세스 오류가 발생하지 않도록 Parallel.For를 사용합니다. –