我们假设我们有:
bool condition = false;
现在我想开始一项新任务:
new Task(() =>
{
Do something as soon as condition == true;
}).Start();
某个时间之后,另一个线程/任务将条件更改为true
我该怎么办呢?
编辑:
我有一个程序用于备份一个文件夹到另一个文件夹。我可以设置多个文件夹(对于axample A - > B,C - > D)。比我启动程序并开始复制文件。
但是当我在程序运行时添加新文件夹(E - > F)时,我必须再次手动启动它(在完成A - > B和C - > D之后)让他做E - > F.
我想要它,在添加新文件夹后,在当前作业完成后再次自动启动,以执行新文件夹。
答案 0 :(得分:4)
如果我理解你,你正在寻找这样的事情:
//TODO: do not forget to dispose m_Condition
ManualResetEventSlim m_Condition = new ManualResetEventSlim(false);
public bool Condition {
get {
return m_Condition.IsSet;
}
set {
if (value)
m_Condition.Set();
else
m_Condition.Reset();
}
}
...
Task myTask = Task.Run(() => {
m_Condition.Wait();
//TODO: put relevant code here
});
只要Condition
切换为true
:
Condition = true; // this unlock myTask
答案 1 :(得分:2)
有很多方法可以做这样的事情,但最简单的方法可能是使用属性:
bool condition = false;
bool Condition
{
get { return condition; }
set
{
if(!condition value)
{
//Now condition has changed from false to true
//Do what you want here
}
condition = value;
}
}
<强> - 编辑 - 强>
我发现你的问题是当从false变为true时所以我稍微编辑了设置部分