Как мне написать метод в C #, который возвращает, когда условие выполняется? - PullRequest
2 голосов
/ 30 июня 2011

У меня есть метод, в котором я хочу вернуть задачу, и задача завершается, когда выполняется какое-то внутреннее условие.так что код будет:

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

Есть ли способ сделать это без цикла, который съедает весь процессор или Thread.Sleep?

еще немного информации: у меня есть класскто предназначен для сбора информации, поступающей через запросы wcf на сервер.это класс, содержащий метод «Метод».этот метод вызывается пользовательским интерфейсом, а также фоновыми работами, которым нужна агрегированная информация.

до сих пор мы передавали действие обратного вызова в метод, который вызывался, как только вся информация была там.Идея возврата Task состоит в том, чтобы избавиться от обратных вызовов, поскольку они усложняют код в зависимых модулях.

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Использование AutoResetEvent :

System.Threading.AutoResetEvent _notifier = new AutoResetEvent(false);

  • При вызове ожидающей задачи _notifier.WaitOne();, поэтому он будет заблокирован до получения сигнала.

  • Когда внутреннее состояние становится истинным, вызовите _notifier.Set();, чтобы сообщить о завершении ожидающего задания.

1 голос
/ 30 июня 2011

Возможно, шаблон IAsynchResult - это то, что вы ищете

Однако, поскольку вы используете TPL, продолжение может иметь больше смысла

1 голос
/ 30 июня 2011

http://msdn.microsoft.com/en-us/library/system.threading.monitor.wait.aspx Попробуйте это условная блокировка переменной.Как только задача будет выполнена, вы можете дать сигнал переменной, и она начнет выполнение.

...