我有一个看起来像这样的方法:
void Foo ()
{
bool flag;
do
{
flag = false;
var check = CheckSomething();
if(check)
{
DoSomething();
flag = true;
}
}
while(flag);
}
目前我正在使用以下代码片段(在许多工作线程中执行)调用该方法:
Bar(); // this method may affect the outcome of CheckSomething()
ThreadPool.QueueUserWorkItem(state => Foo());
- 对我来说重要的是循环体总是在 Bar() 被调用后不久运行,但是
CheckSomething()
很贵,因此我不想Foo()
被比要求更频繁地打电话
Foo()
当且仅当它尚未执行并CheckSomething()
在退出之前调用时,是否有一种保证安全的调用方式?