C # Вызов асинхронного метода внутри потока

Моя простая функция

 private bool IsValidActiveDirectoryUser(string activeDirectoryServerDomain, string username, string password)
    {
        try
        {
            DirectoryEntry de = new DirectoryEntry("LDAP://" + activeDirectoryServerDomain, username + "@" + activeDirectoryServerDomain, password, AuthenticationTypes.Secure);
            DirectorySearcher ds = new DirectorySearcher(de);
            ds.FindOne();
            return true;
        }
        catch //(Exception ex)
        {
            return false;
        }
    }
1
задан Alexandre Neukirchen 26 February 2019 в 18:47
поделиться

2 ответа

Async void не позволит вам перехватить какие-либо исключения и прекратит работу вашего приложения, когда его выбросят. Исключения наблюдаются и обрабатываются как обычные исключения при использовании задачи вместо void.

Вы можете прочитать все об этом здесь ссылка

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

0
ответ дан Lloyd 26 February 2019 в 18:47
поделиться

Ваша проблема связана с использованием async void, которого следует избегать . Одна из его проблем заключается в том, что вы не можете перехватывать исключения, используя try / catch.

Обработчики событий в C # - это языковая особенность типа «забей и забудь». В частности, асинхронные обработчики событий должны использовать async void, и это означает, что код публикации событий не может видеть эти исключения. Если вы хотите разрешить async обработчики событий и обрабатывать исключения (или другие результаты) из них, вы можете использовать «отложенное» решение или сделать так, чтобы ваш делегат обработчика событий возвращал Task.

0
ответ дан Stephen Cleary 26 February 2019 в 18:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: