Завершение основного потока во время асинхронного вызова метода? - PullRequest
3 голосов
/ 10 августа 2011

Просто интересно, нужно ли программно создавать новый поток в ситуации, когда основной поток не нуждается и не должен ждать завершения асинхронного вызова метода?

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

Какая лучшая практика в такой ситуации? В настоящее время я связан с .NET 3.5.

1 Ответ

1 голос
/ 10 августа 2011

Единственный раз, когда это может быть проблемой, это если «вызывающий метод» был точкой входа в приложение (он же Main()), а сам процесс завершился. В этом сценарии разработайте свой API таким образом, чтобы вы могли выбрать ожидание завершения, если вам нужно - это может быть прямым (наличие объекта возврата, который позволяет ожидать) или косвенным (предоставление обратного вызова, который устанавливает ManualResetEvent или аналогичный).

По определению, вызов асинхронного метода уже с участием другого потока, поэтому вам не нужно дублировать это (и, действительно, не следует). Вы должны, однако, убедиться, что любой необходимый «Конец *» вызывается - обычно с помощью обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...