Je suis en cours d'exécution d'une requête et traiter les lignes en utilisant simultanément retour une fonction appelée StartJob qui travaillera sur mon emploi:Bloquer l'accès simultané ThreadPool
ThreadPool.QueueUserWorkItem(StartJob, job);
fonctionne très bien et est très rapide . Mais maintenant, on me dit que lorsque la requête retourne, certaines lignes peuvent avoir la même valeur pour job.UserID et que nous ne pouvons pas exécuter la fonction StartJob simultanément pour des valeurs identiques de job.UserID. La question est: comment puis-je avoir l'exécution du bloc StartJob jusqu'à ce que toutes les autres instances de StartJob avec le même UserID soient terminées?
Je suis sûr qu'il existe un moyen d'obtenir un verrou par utilisateur, mais je ne sais pas comment le faire. Merci pour l'aide.
Il n'y aura pas de choc de si vous exécutez concurrency StartJob avec la même job.UserID jusqu'à ce qu'il vise à une ressource partagée comme un fichier ou à la ligne base de données. Pourriez-vous montrer ce que vous faites dans StartJob? –
Quelle version de .NET? 3.5 ou 4.0? – xanatos
@invisible tout à fait raison, j'exécute plus de requêtes dans StartJob qui verrouillent les lignes détenues par UserID et nous voyons donc un timeout car ces requêtes de longue durée verrouillent ces lignes. Donc, je voudrais démarrer StartJob avec un verrou spécifique à UserID et bloquer juste là jusqu'à ce qu'il soit gratuit. – powlette