我有一个案例,我使用多个线程从Web服务查询。曾经有一段时间,我必须向Web服务器验证自己,因为会话在此之后到期。我像以下那样授权:
static void threadCall(){
try{
ws.query();
}
catch(AuthenticationFailException ex){
AuthAgain();
threadCall();
return;
}
}
问题是,多个线程的身份验证失败,多个线程想要同时进行身份验证。这会使进程变慢,因此我只想对1个线程进行身份验证,并希望其他线程等待身份验证完成。我怎样才能做到这一点。
答案 0 :(得分:0)
我会做这样的事情。
bool authenticated = false;
object lockObject = new object();
static void threadCall(){
verifyAuthentication();
try{
ws.query();
}
catch(AuthenticationFailException ex){
authenticated = false;
threadCall();
return;
}
}
static void verifyAuthentication()
{
if (!authenticated)
{
lock (lockObject)
{
if (!authenticated)
{
AuthAgain();
authenticated = true;
}
}
}
}