Я работал с классом AsyncEnumerator, чтобы помочь очистить мой асинхронный код.Проблема в том, что код возврата после возврата никогда не срабатывает.Пользовательский интерфейс вызывает объект, который вызывает объект HttpWorker при нажатии кнопки.Независимо от того, сколько раз нажата кнопка, код никогда не выходит за пределы доходности.
public void ReadFromUrl(string Url)
{
AsyncEnumerator asyncEnum = new AsyncEnumerator();
asyncEnum.BeginExecute(GetData(asyncEnum,Url), asyncEnum.EndExecute);
}
private IEnumerator<Int32> GetData(AsyncEnumerator AsyncEnum, String Url)
{
url = Url;
request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = true;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6";
request.BeginGetResponse(AsyncEnum.End(), null);
AsyncEnum.SyncContext = null;
yield return 1;
response = (HttpWebResponse)request.EndGetResponse(AsyncEnum.DequeueAsyncResult());
if (response.StatusCode == HttpStatusCode.OK)
{
// Create the stream, encoder and reader.
Stream responseStream = response.GetResponseStream();
Encoding streamEncoder = Encoding.UTF8;
StreamReader responseReader = new StreamReader(responseStream, streamEncoder);
responseAsString = responseReader.ReadToEnd();
}
else
{
throw new Exception(String.Format("Response Not Valid {0}", response.StatusCode));
}
}