2010-02-08 18 views
40

Cosa fa MethodImplOptions.Synchronized?Cosa fa MethodImplOptions.Synchronized?

è il codice qui sotto

[MethodImpl(MethodImplOptions.Synchronized)] 
public void Method() 
{ 
    MethodImpl(); 
} 

equivalente a

public void Method() 
{ 
    lock(this) 
    { 
     MethodImpl(); 
    } 
} 

risposta

38

Questo è stato risposto con Mr. Jon Skeet su un altro site.

Citazione di post

E 'l'equivalente di mettere blocco (questa) intorno al metodo di tutta la chiamata.

Il post ha più codice di esempio.

+5

Questo è vero per i metodi e le proprietà di istanza, ma per quelli statici si blocca sul tipo, che [va contro le migliori pratiche ] (http://michaelprimeaux.com/blog/2008/01/09/methodimploptions-dot-synchronized/) e in realtà ha un noto [bug su sistemi x64] (https://connect.microsoft.com/VisualStudio/feedback/details/423280/methodimpl-methodimploptions-synchronized-intermittently-throws-synchronizationlockexception-when-used-on-static-method-on-x64) th a causa dell'eccezione delle eccezioni di sincronizzazione dell'oggetto. – Shaun