Скорее всего, вы зашли в тупик. Для удовольствия попробуйте сделать это
var result = await Task.Run(() => SolveCaptcha(imagename)).ConfigureAwait(false);
вместо того, что вы сейчас делаете в методе login
.
Еще я заметил, что SolveCaptcha()
уже asynchronus, поэтому вам не нужна оболочка Task.Run()
. Обычно вы используете оболочку Task.Run()
для работы, связанной с процессором (подумайте о тяжелой обработке, такой как хеширование, шифрование и т. Д. c.), А не для работы ввода-вывода (например, чтение из сокета или файла).
Так что в в конце он должен выглядеть так:
await SolveCaptcha(imagename).ConfigureAwait(false);
Еще одна проблема, которую следует исправить, - это ваш метод, содержащий эту строку. У вас это async void
, но должно быть async Task
. Вызывающему абоненту понадобится Task
для ожидания и проверки.
Что касается того, как происходит эта тупиковая блокировка ... информации об этом достаточно. Просто погуглите c# async/await configureawait deadlock
. Вот дополнительная информация для начала (где-нибудь в середине страницы найдите слово "deadlock" жирным шрифтом)