在线程之间做一次某件事

本文关键字:一次 线程 之间 | 更新日期: 2024-09-25 14:22:58

我有一个使用多个线程从web服务进行查询的情况。偶尔,我必须向web服务器验证自己,因为会话在此时间之后过期。我这样做授权:

static void threadCall(){
    try{
        ws.query();
    }
    catch(AuthenticationFailException ex){
        AuthAgain();
        threadCall();
        return;
    }
}

问题是,多个线程的身份验证失败,并且多个线程希望同时进行身份验证。这会减慢进程,所以我只想对1个线程进行身份验证,并希望其他线程等待身份验证完成。我怎样才能做到这一点。

在线程之间做一次某件事

我会这样做。

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;
            }
        }
    }
}