Если вы действительно хотите использовать HttpWebRequest, ближайший к асинхронному рабочему процессу будет выглядеть примерно так:
HttpWebRequest webRequest;
void BeginWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}
void EndWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
Приведенный выше код использует старый стиль "обратного вызова" для асинхронного подходакоммуникации. Результат вашего запроса будет получен через метод EndWebRequest.
При этом вам следует подумать о переходе на HttpClient, поскольку он поддерживает гораздо более простой синтаксис "async -> await".