Достаточно ли сравнивать ManagedThreadId
во время создания объекта и во время вызова метода для проверки того, что он не используется в сценарии многопоточности?
public class SingleThreadSafe
{
private readonly int threadId;
public SingleThreadSafe()
{
threadId = Thread.CurrentThread.ManagedThreadId;
}
public void DoSomethingUsefulButNotThreadSafe()
{
if(threadId!=Thread.CurrentThread.ManagedThreadId)
{
throw new InvalidOperationException(
"This object is being accessed by a thread different than the one that created it. " +
" But no effort has been made to make this object thread safe.");
}
//Do something useful, like use a previously established DbConnection
}
}
Моя интуиция часто ошибается в потоковом режиме, поэтому я хотел проверить, есть ли крайние случаи, о которых я должен помнить.