2010-06-15 4 views
0

Dans ASP.NET 3.5, nous soupçonnons qu'un délégué qui déclenche par un "Timer" bloque les autres appels de méthode. À partir des journaux, certains appels de fonction attendent la fin du délégué et continuent à fonctionner..NET "Timer" bloquerait d'autres appels de méthode?

Est-ce vrai? Si oui, quelle solution de contournement puis-je faire?

PS: Le délégué contient des codes à utiliser WCF pour récupérer des données et le code suivant

private void Replace<T>(ref IList<T> src, IList<T> des) 
    { 
     lock(src) 
     { 
      while (src.Count > 0) 
      { 
       GC.SuppressFinalize(src.ElementAt(0)); 
       src.RemoveAt(0); 
      } 
      GC.SuppressFinalize(src); 
      src = des; 
     } 
    } 

de Merci beaucoup.

Répondre

1

Cela dépend de l'implémentation Timer que vous utilisez - il y en a au moins trois. Si vous utilisez un Timer qui se déclenche sur le pool de threads sans objet de synchronisation, cela ne devrait pas poser de problème.

Le fait que vous verrouilliez pendant la durée de l'appel bloquera tout autre verrouillage sur le même objet, bien sûr.

0

Cela n'a rien à voir avec votre question spécifique, mais les GC.SuppressFinalize appels dans votre code sont un énorme drapeau rouge pour moi. En raison de son usage prévu, son utilisation est généralement limitée à l'implémentation de l'interface IDisposable. Leur façon de l'utiliser ici pourrait causer des fuites de ressources. Lisez Implementing Finalize and Dispose to Clean Up Unmanaged Resources pour plus d'informations.