В моем потоке пользовательского интерфейса запущены два процесса. Однако, когда я запускаю первый, с функциональностью BeginGetStream, он входит в цикл и ожидает его выполнения и возвращает результат, когда вы будете готовы, но во втором прогоне, через функциональность BeginGetResponse, этот «умирает» там, и программа выполняет не продолжать и не возвращает мне нужное значение. В этих процессах используйте IasynResult.
Я пробовал:
Преобразовать в задачу (Task.Run)
Назначьте процессу новый поток (Thread x = new Thread ())
Установите параметр ConfigureAwait (ConfigureAwait (continueOnCapturedContext: false), ConfigureAwait (false));
Преобразуйте в методы asyncronos и примените "ожидание"
Используйте AutoResetEvent, чтобы дождаться завершения процесса и не продолжать.
Размещение потока в спящем режиме (Thread.Sleep)
Использование Thread.Start, Thread.Join
и т.д....
По сути, у меня есть три функции (Function1, Function2 и Function3). Изначально я использую только Function2 и function3, и все в порядке. Затем, в следующем порядке, где мне не нужна блокировка потока пользовательского интерфейса, он блокирует, и на этот раз блокирует три функции, которые у меня есть, но приложение блокирует меня, когда я делаю запрос на BeginGetResponse в Function2, а не там. (Перевод всего проекта в асинхронный режим очень дорого обходится, поэтому этот вариант будет последним.) Я не знаю, что еще можно сделать ... :( Пример кода:
Функция 1:
public void Function1()
{
{
HttpWebRequest requestHttp = (HttpWebRequest)HttpWebRequest.CreateHttp(new Uri(serverUrl, UriKind.Absolute));
string RString = string.Format("rftoken=123456789");
AutoResetEvent handler = new AutoResetEvent(false);
IAsyncResult TestResult= null;
try
{
requestHttp.BeginGetRequestStream(
(IAsyncResult result) =>
{
TestResult= result;
handler.Set();
}, requestHttp );
handler.WaitOne();
}
catch (Exception) { }
return Function2(TestResult, RString );
}
}
-------- ФУНКЦИЯ 2 ---------------------------------------- ------------------------------------------------
private Example Function2(IAsyncResult TestResult2, string RString2)
try
{
HttpWebRequest request = (HttpWebRequest)TestResult2.AsyncState;
Stream strm = request.EndGetRequestStream(TestResult2);
StreamWriter writer = new StreamWriter(strm);
writer.Write(RString2);
writer.Dispose();
}
catch
{}
AutoResetEvent handler = new AutoResetEvent(false);
IAsyncResult Async= null;
try
{
requestHttp.BeginGetRequestStream(
(IAsyncResult result) =>
{
Async= result;
handler.Set();
}, requestHttp );
handler.WaitOne();
}
catch (Exception) { }
return Function3(Async);
}
}
------------ ФУНКЦИЯ 3 ------------------------------------ -------------------------------------------------- -
private Example Function3 (IAsyncResult Async3)
{....}
... Не знаю, что еще попробовать ... Кто-нибудь может мне помочь.
Спасибо.