C # Ожидание и удаление задач - PullRequest
1 голос
/ 05 марта 2012


Я просматривал эту статью об использовании задач в C #, и я бродил, если кто-то может что-то прояснить для меня?
Не вызывает ожидание для задачи, чтобы победить цель создания задачи, потому что не будет ли она заморозить основной поток в любом случае, потому что теперь основной поток должен ждать завершения задачи.
Я предполагаю, однако, что ожидание не будет вызвано сразу, так что теперь, когда бы вы назвали его или как еще вы узнали бы, когда распорядиться задачей.Предполагая, что у нас есть простой случай, подобный этому:

    void MyFunction()
    {
        Task t = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); });
    }

, если вы сразу вызовете t.Wait (), основной поток все еще будет ждать 5 секунд, прежде чем сможет сделать что-то еще, что в некотором роде побеждаетс точки зрения пользователей, они не смогут ничего сделать за 5 секунд.Как вы узнали, что через 5 секунд эта задача была выполнена?И вы можете избавиться от т?Как правильно справиться с этим?
Извините, если вопрос действительно наивный :( Спасибо всем: D

1 Ответ

6 голосов
/ 05 марта 2012

Вы, вероятно, никогда бы не вызвали Wait для одиночной задачи , подобной этой, из потока пользовательского интерфейса - как вы сказали, весь смысл не блокирует поток пользовательского интерфейса. Фактически, ожидание любой задачи из потока пользовательского интерфейса было бы проблемой.

Однако ожидание завершения задачи может быть полезно для синхронизации нескольких задач и возврата комбинированного результата - например, представьте себе две задачи, которые одновременно выполняют запрос отелей на ценовой линии и expedia, и поток, который породил обе задачи (например, фоновый поток), ожидающий результат обеих задач и объединяющий результаты, чтобы упорядочить доступные отели на обоих сайтах по цене.

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

...