Иногда требуется организовать ожидание до тех пор, пока не завершится любая из группы задач. Для этой цели служит метод Wait Ап у . Ниже приведена простейшая форма его объявления.
public static int WaitAny(params Task[]
Задачи, завершения которых требуется ожидать, передаются с помощью параметра в виде массива
Попробуйте применить метод WaitAny на практике, подставив в предыдущей программе следующий вызов.
Task.WaitAny(tsk, tsk2);
Теперь, выполнение метода Main возобновится, а программа завершится, как только завершится одна из двух задач.
Помимо рассматривавшихся здесь форм методов Wait, WaitAll и WaitAny , имеются и другие их варианты, в которых можно указывать период простоя или отслеживать признак отмены. (Подробнее об отмене задач речь пойдет далее в этой главе.)
Вызов метода Dispose
В классеTaskреализуется интерфейсIDisposable,Bкотором определяется методDispose . Ниже приведена форма его объявления.
public void Dispose
Метод Dispose реализуется в классе Task, освобождая ресурсы, используемые этим классом. Как правило, ресурсы, связанные с классом Task, освобождаются автоматически во время "сборки мусора" (или по завершении программы). Но если эти ресурсы требуется освободить еще раньше, то для этой цели служит метод Dispose . Это особенно важно в тех программах, где создается большое число задач, оставляемых на произвол судьбы.
Следует, однако, иметь в виду, что метод Dispose можно вызывать для отдельной задачи только после ее завершения. Следовательно, для выяснения факта завершения отдельной задачи, прежде чем вызывать метод Dispose , потребуется некоторый механизм, например, вызов метода Wait . Именно поэтому так важно было рассмотреть метод Wait , перед тем как обсуждать метод Dispose . Ели же попытаться вызвать Dispose для все еще активной задачи, то будет сгенерировано исключение InvalidOperationException.