powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависает подключение ConnectAsync у FluentFTP.
12 сообщений из 12, страница 1 из 1
Зависает подключение ConnectAsync у FluentFTP.
    #40013729
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется клиент FTP FluentFTP с примером скачивания файла синхронно и асинхронно.
Пример синхронного скачивания работает без проблем, а при асинхронном скачивании программа зависает на
Код: vbnet
1.
Await ftp.ConnectAsync(token)


Вот сама функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		Async Function DownloadFileAsync() As Task
			Dim token = New CancellationToken()

			Using ftp = New FtpClient("127.0.0.1", "ftptest", "ftptest")
				Await ftp.ConnectAsync(token)

				' define the progress tracking callback
				Dim progress As Progress(Of FtpProgress) = New Progress(Of FtpProgress)(
					Sub(p)
						If p.Progress = 1 Then
							' all done!
						Else
							' percent done = (p.Progress * 100)
						End If
					End Sub)

				' download a file with progress tracking
				Await ftp.DownloadFileAsync("D:\Github\FluentFTP\README.md", "/public_html/temp/README.md", FtpLocalExists.Append, FtpVerify.None, progress, token)

			End Using
		End Function


Я её вызываю так:
Код: vbnet
1.
DownloadFileAsync.Wait()


Программа доходит до
Код: vbnet
1.
Await ftp.ConnectAsync(token)

и наглухо зависает.

Куда копать ума не приложу.
Может кто поможет выйти из этого тупика?
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013734
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В строну DeadLock- классический случай.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013750
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FluentFTP довольно распространенный FTP клиент и имеет более 3 400 000 скачиваний с NuGet, при этом выложил кучу примеров на разных языках, не думаю, чтобы у них было что то не предусмотрено.

Похоже это я делаю какие то элементарные ошибки при работе с асинхронными вызовами.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013751
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала, CancellationToken, есл он нужен, совсем не так создается, тут это ни на что не должно влиять, но все-таки. Обычно а каждого метода с ним есть метод-братан без него, т.ч. замени.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013753
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Posohov

Я её вызываю так:
Код: vbnet
1.
DownloadFileAsync.Wait()



Я уже устал говорить - "Wait()" и "Result" - забудьте об их существовании. Полностью и навеки.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013756
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posohov
не думаю, чтобы у них было что то не предусмотрено.
это взято из примеров?
Posohov
Я её вызываю так:
Код: vbnet
1.
DownloadFileAsync.Wait()

вряд ли
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013767
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я и подозревал, все дело оказалось в GUI и, как показывает прежний опыт, в потоках.
Запустил эту же функцию в консоле и там все сразу заработало.
Правда радости это не принесло, потому как прогресс загрузки в этой функции отрабатывается не синхронно с загрузкой самого файла и достигает 100% практически сразу, задолго до окончания скачивания файла.

Но это уже совсем другая история...
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013770
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posohov
Как я и подозревал, все дело оказалось в GUI и, как показывает прежний опыт, в потоках.
Дело в контексте синхронизации, которого нет в консольном приложении. Вызовом Wait создается дедлок.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013780
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Posohov,

По-моему в WinForms уже есть асинхронные обработчики GUI-событий. Дедлок у тебя, скорее всего от того, что ты DownloadFileAsync вызываешь из какого-нибудь button_Click - вот и сделай его async, а вызов DownloadFileAsync сделай с await - это должно решить проблему.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013783
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthis
По-моему в WinForms уже есть асинхронные обработчики GUI-событий
что значит "уже"? Ты всегда мог написать async с тех пор, как они появились. Собственно, для async void вместо async Task это, пожалуй, единственное применение.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013808
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
что значит "уже"? Ты всегда мог написать async с тех пор, как они появились. Собственно, для async void вместо async Task это, пожалуй, единственное применение.

Ну я в формсах не эксперт. Просто краем глаза видел где-то в примерах.
...
Рейтинг: 0 / 0
Зависает подключение ConnectAsync у FluentFTP.
    #40013903
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
что значит "уже"? Ты всегда мог написать async с тех пор, как они появились. Собственно, для async void вместо async Task это, пожалуй, единственное применение.

Я реально тупанул - async void ведь при компиляции превратится в обычный void
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависает подключение ConnectAsync у FluentFTP.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]