Если вы выполняете запрос и ожидаете его возвращения, я бы сказал, что оставайтесь синхронными - нет никаких причин делать асинхронный запрос, если вы не собираетесь ничего делать или не реагируете во время ожидания.
Для синхронизации вызова:
WebRequest request = WebRequest.Create("http://something.somewhere/url");
WebResponse response = null;
request.Timeout = 10000; // 10 second timeout
try
{
response = request.GetResponse();
}
catch(WebException e)
{
if( e.Status == WebExceptionStatus.Timeout)
{
//something
}
}
При выполнении асинхронного:
Вам нужно будет вызвать Abort () для объекта запроса - вам нужно самостоятельно проверить время ожидания, нет встроенного способа принудительного применения жесткого времени ожидания.