我如何在C#中编写一个方法,一旦条件成立就返回?

时间:2011-06-30 01:56:48

标签: c# .net asynchronous task-parallel-library

我有一个方法,我想返回任务,任务完成一旦内部条件为真。 所以代码是:

public Task<Result> Method(int numberOfAggregats){
    return new Task<Result>(() => "return result once 
                aggregated information > numberOfAggregates");
}

有没有办法在没有循环吃掉所有cpu或Thread.Sleep的情况下做到这一点?

更多信息:我有一个课程,其目的是将通过wcf查询进入的信息聚合到服务器中。这是包含“Method”方法的类。 这种方法是由ui以及需要聚合信息的背景作品调用的。

直到现在我们将回调动作传递给方法,一旦所有信息都在那里就会被调用。返回Task的想法是摆脱回调,因为它们使依赖模块中的代码复杂化。

3 个答案:

答案 0 :(得分:2)

使用AutoResetEvent

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可能更有意义