我有一个方法,我想返回任务,任务完成一旦内部条件为真。 所以代码是:
public Task<Result> Method(int numberOfAggregats){
return new Task<Result>(() => "return result once
aggregated information > numberOfAggregates");
}
有没有办法在没有循环吃掉所有cpu或Thread.Sleep的情况下做到这一点?
更多信息:我有一个课程,其目的是将通过wcf查询进入的信息聚合到服务器中。这是包含“Method”方法的类。 这种方法是由ui以及需要聚合信息的背景作品调用的。
直到现在我们将回调动作传递给方法,一旦所有信息都在那里就会被调用。返回Task的想法是摆脱回调,因为它们使依赖模块中的代码复杂化。
答案 0 :(得分:2)
System.Threading.AutoResetEvent _notifier = new AutoResetEvent(false);
在等待的任务呼叫_notifier.WaitOne();
中,它将被阻止,直到收到信号。
当内部条件变为真时,请致电_notifier.Set();
以表示等待任务完成。
答案 1 :(得分:1)
http://msdn.microsoft.com/en-us/library/system.threading.monitor.wait.aspx 试试这是一个条件变量锁。任务完成后,您可以发出变量信号,然后开始执行。
答案 2 :(得分:1)
也许IAsynchResult pattern正是你要找的东西
但是,由于您使用的是TPL continuation可能更有意义