我有一種情況,我正在使用多個線程從Web服務進行查詢。一次之後,我必須向Web服務器驗證自己的身份,因爲會話在此時間後過期。我這樣做的授權:在線程之間做一次事情
static void threadCall(){
try{
ws.query();
}
catch(AuthenticationFailException ex){
AuthAgain();
threadCall();
return;
}
}
問題是,身份驗證失敗的多個線程和多個線程想同時進行身份驗證。這會降低進程速度,所以我只想對1個線程進行身份驗證,並希望其他線程等待身份驗證完成。我怎樣才能做到這一點。
搜索[MethodImpl(MethodImplOptions.Synchronized)]或http://stackoverflow.com/questions/391913/re-entrant-locks-in-c-sharp – Ako 2015-03-02 08:04:15
其實,這些都不是我想要的對於。它們用於等待其他線程完成工作的線程。所以每當其他線程結束時,每個線程都會完成這項工作。我想要的是,這項工作必須完成一次。 – 2015-03-02 08:06:49
便宜的解決方案:在所有線程可訪問的布爾之間設置爲true,並在其他線程內部執行一個while循環,並使用合理的時間執行Thread.Sleep,以便不使用比需要更多的容量,然後在你的一個線程完成了認證,你將bool設置爲false。另一個可能對你的問題更清晰的解決方案有用的東西是查看Task.Wait() - 方法https://msdn.microsoft.com/de-de/library/dd537610%28v=vs.110%29 .aspx – 2015-03-02 08:16:17