在线程之间做一次事

时间:2015-03-02 07:56:49

标签: c# multithreading web-services

我有一个案例,我使用多个线程从Web服务查询。曾经有一段时间,我必须向Web服务器验证自己,因为会话在此之后到期。我像以下那样授权:

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

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

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